在Sitecore中,我只想为图像文件设置Upload MaxSize。我们可以更新Media.MaxSizeInDatabase来设置MaxSize,但是此设置包括媒体库中的所有文件。
有什么方法可以只为图像文件设置MaxSize吗?或者,我可以为此创建任何验证吗?
先感谢您!!
=========更新==========
我尝试使用所有代码和设置,但无法正常工作。我认为代码很好,但是我可能必须确保配置的位置。当我在顶部添加“ xmlns:patch”属性时,如下所示
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
它显示错误“无法识别的属性xmlns:patch”。因此,我在web.config的“ / configuration / sitecore”元素中添加了配置,如下所示
<?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
以检查某些类型的文件大小,这与Mike Reynolds的帖子类似,可以限制某些类型的文件上传。
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
。
需要注意的是,显示的错误消息不太友好,但是错误已正确记录在日志文件中:(
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句