【问题标题】:Sitecore Media Library MaxSizeSitecore 媒体库 MaxSize
【发布时间】:2015-09-18 10:14:24
【问题描述】:

在 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>

这不行

【问题讨论】:

    标签: image sitecore media validation


    【解决方案1】:

    您可以将自己的处理器修补到 uiUpload 以检查某些类型的文件大小,这与 Mike Reynolds 发给 restrict certain file types to be upload 的这篇博文非常相似。

    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 处理器中以处理 - 使用 dotPeekSitecore.Pipelines.Attach.CheckSize,Sitecore.Kernel 中查看实现。

    对此需要注意的是,显示的错误消息不太友好,但错误已正确记录在日志文件中:(

    【讨论】:

    • 感谢您的回答。我已经更新了更多信息。我不知道为什么它不起作用。你能确定web.config文件中的配置位置是否正确吗?
    • 您需要将配置添加到新文件中以使用 xmlns:patch 命名空间对其进行修补。我更新了答案,但看看Sitecore File Patching document。如果您需要更多帮助,请告诉我。
    • 非常感谢,它有效。但是,它不检查“Media.MaxImageSizeInDatabase”值 (1MB)。我在设置中添加了扩展名(.jpg、.png)。如果我尝试上传小于 1MB 的文件,它会显示相同的错误。它似乎只检查处理器中的限制扩展。
    • 使用dotPeek查看Sitecore.Kernel.dllSitecore.Pipelines.Attach.CheckSize的代码。您想通过与此处相同的检查合并那里的逻辑,然后将processors/attachFile/processor 中的处理器添加到配置中(与上述基本相同)。如果您遇到困难,请告诉我,我会在明天更新代码。
    • 将配置 (http://pastebin.com/7cYV0G63) 和代码 (http://pastebin.com/rUSeq1r6) 添加到 Pastebin。同样,错误消息不是太友好,不知道为什么它不起作用 Sitecore 调用相同的东西......但它完成了工作......
    猜你喜欢
    • 2015-11-10
    • 2019-02-18
    • 2014-01-08
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多