Mikhail Filippov's Blog

My personal blog.

Загрузка больших файлов в Media для Umbraco CMS

Перейти к готовому примеру web.config

Недавно столкнулся со с проблемой в Umbraco CMS. С настройками по умолчанию не получалось загружать файлы больше 30Мб. Причем выглядит это крайне странно полоска загрузки файл пробегает окно загрузки закрывается, при этом файл не появляется. При это никаких ошибок не возникает. Обычно проблемы с загрузкой больших файлов решается установкой в web.config настройки максимальной длины запроса:

web.config
1
<httpRuntime requestValidationMode="2.0" maxRequestLength="1024000" executionTimeout="3600" />

Но это не помогло.

Попытаемся разобраться в чем же дело. Для начала посмотрим что происходит при загрузке файла. Для этого запустим Fiddler и попытаемся проанализировать весь процесс.

  • Нажимаем кнопку загрузить файл: Нажимаем загрузить файл
  • Выбираем файл и нажимаем кнопку Upload: Выбираем файл
  • Видим что пошла нормальная загрузка: Пошла загрузка
  • После окончания загрузки окно закрывается без ошибок и предупреждений но файл на появляется. Файл не появился
  • Откроем окно загрузки повторно: Повторное октрытие
  • Тут мы видим что полоска загрузки красная похоже произошла какая-то ошибка. Посмотрим что в этот момент происходило в Fiddler. Происходит странное, в момент обращения к обработчику MediaUploader.ashx выдается ошибка 404, при этом в случае загрузки небольшого файла такого не происходит. Повторное октрытие
  • После долгих поисков я нашел параметр который отвечает за настройку фильтрации максимальному размеру поля Content-Legth в запросе. Для его изменения открываем IIS Manager(Его можно поменять и из web.config как я опишу ниже). Открывает настройки нашего сайта и выбираем “Request Filtering”: ISS Manager
  • На панели действий выбираем “Edit Feature Settings…”: Edit Feature Settings
  • Меняем значение поля Maximum allowed content length на большее например дописываем пару нулей :), обратите внимание что размер значения в байтах: Change Settings
  • В web.config проверяем что в httpRuntime стоит правильно значение maxRequestLength без этого работать не будет!
  • Пробуем повторно загрузить файл: Change Settings
  • Все работает корректно

Чтобы все это настроить без IIS Manager

В секции system.web и system.webServer файла web.config нужно добавить следующие параметры (ограничение размера 1Гб):

web.config
1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
  <system.web>
      <httpRuntime requestValidationMode="2.0" maxRequestLength="1024000" executionTimeout="3600" />
  </system.web>
  <system.webServer>
      <security>
      <requestFiltering>
          <requestLimits maxAllowedContentLength="1024000000" />
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>

Comments