在Sitecore的,我想只有对图像文件设置上传MAXSIZE。 我们可以更新Media.MaxSizeInDatabase设置MAXSIZE,但是这个设置包括媒体库中的所有文件。
有什么办法来设置MAXSIZE只图像文件? 或者,我可以创建这个任何验证?
先感谢您!!
=========更新==========
我试图用所有代码和设置,但它不工作。 我认为代码是好的,但我可能必须确保配置的地方。 当我添加“的xmlns:补丁”顶部属性中,像下面
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
它显示错误“Unrecongnized属性的xmlns:补丁”。 所以,我添加的配置中的“/配置/ Sitecore的”元素在一个web.config,象下面
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
.....
<sitecore database="SqlServer">
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<processors>
<uiUpload>
<processor mode="on" type="ImageMaxSize.ImageItemValidator2, Sitecore.Kernel" patch:before="processor[@type='Sitecore.Pipelines.Upload.CheckSize, Sitecore.Kernel']">
<restrictedExtensions hint="raw:AddRestrictedExtension">
<!-- Be sure to prefix with a dot -->
<extension>.jpg</extension>
<extension>.jepg</extension>
<extension>.png</extension>
<extension>.bmp</extension>
</restrictedExtensions>
</processor>
</uiUpload>
</processors>
</sitecore>
</configuration>
这是行不通的
您可以在自己的处理器补丁到uiUpload
检查文件大小对于某些类型的,在一个非常相似的方式来此帖来自迈克·雷诺兹以限制某些类型的文件进行上传 。
public class ImageCheckSize : UploadProcessor
{
public List<string> RestrictedExtensions { get; set; }
public ImageCheckSize()
{
RestrictedExtensions = new List<string>();
}
public void Process(UploadArgs args)
{
Assert.ArgumentNotNull((object) args, "args");
if (args.Destination == UploadDestination.File)
return;
foreach (string index in args.Files)
{
HttpPostedFile file = args.Files[index];
if (!string.IsNullOrEmpty(file.FileName) && IsRestrictedExtension(file.FileName))
{
if ((long) file.ContentLength > MaxImageSizeInDatabase)
{
args.ErrorText = string.Format("The image \"{0}\" is too big to be uploaded. The maximum size for uploading images is {1}.", file.FileName, MainUtil.FormatSize(MaxImageSizeInDatabase));
Log.Warn(args.ErrorText, this);
args.AbortPipeline();
break;
}
}
}
}
private bool IsRestrictedExtension(string filename)
{
return RestrictedExtensions.Exists(restrictedExtension => string.Equals(restrictedExtension, Path.GetExtension(filename), StringComparison.CurrentCultureIgnoreCase));
}
public static long MaxImageSizeInDatabase
{
get
{
return Sitecore.Configuration.Settings.GetLongSetting("Media.MaxImageSizeInDatabase", 524288000L);
}
}
}
然后添加在所需配置的变化。 创建一个新的配置文件/App_Config/Includes
(例如ImageSizeCheck.config)
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<processors>
<uiUpload>
<processor mode="on" type="Custom.Business.Pipeline.Upload.ImageCheckSize, Custom.Business"
patch:before="processor[@type='Sitecore.Pipelines.Upload.CheckSize, Sitecore.Kernel']">
<restrictedExtensions hint="list">
<extension>.jpg</extension>
<extension>.png</extension>
</restrictedExtensions>
</processor>
</uiUpload>
</processors>
<settings>
<setting name="Media.MaxImageSizeInDatabase" value="1MB" />
</settings>
</sitecore>
</configuration>
您还需要添加另一个处理器进入attachFile
处理器,如果使用者将一个新的文件,以现有的媒体项目来处理-用dotPeek看到在执行Sitecore.Pipelines.Attach.CheckSize,Sitecore.Kernel
。
一个需要注意的情况是,所显示的错误消息是不太友好,但在日志文件被正确地记录错误:(