2015-01-05 4 views
1

В Sitecore я хотел бы установить Upload MaxSize только для файлов изображений. Мы можем обновить Media.MaxSizeInDatabase, чтобы установить MaxSize, но этот параметр включает все файлы в Media Library.Sitecore Media Library 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> 

Это не работает

ответ

1

Вы можете залатать в собственном процессоре в uiUpload проверить файл размер для определенных типов, очень похожим на этот пост от Майка Рейнольдса до 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 процессоры для обработки, если пользователь подключает новый файл к существующему пункту медиа - использовать dotPeek, чтобы увидеть реализация в Sitecore.Pipelines.Attach.CheckSize,Sitecore.Kernel.

Одно предостережение к этому является то, что сообщение отображается ошибка не слишком дружелюбно, но ошибка корректно записывается в лог-файлах :(

enter image description here

+0

Спасибо за ответ. Я обновил подробнее Я не знаю, почему он не работает. Не могли бы вы убедиться, что место конфигурации в файле web.config верное? – Jay

+0

Вам нужно добавить конфигурацию в новый файл, чтобы исправить ее с помощью пространства имен xmlns: patch Я обновил ответ, но взгляните на документ [Sitecore File Patching document] (http://sdn.sitecore.net/upload/sitecore6/60/include_file_patching_facilities_sc6orlater-a4.pdf). Сообщите мне, нужна ли вам дополнительная помощь – jammykam

+0

Большое вам спасибо, это работает. Но он не проверяет значение «Media.MaxImageSizeInDatabase» (1 МБ). Я добавил расширения (.jpg, .png) в настройках. И если я попытаюсь загрузить то, что меньше 1 МБ, он показывает ту же ошибку. Кажется, что он только проверяет ограниченные расширения в процессоре. – Jay

Смежные вопросы