Как увеличить максимальный размер загружаемого файла в ASP.NET?


238

У меня есть форма, за исключением загрузки файла в ASP.NET. Мне нужно увеличить максимальный размер загрузки до 4 МБ по умолчанию.

Я нашел в некоторых местах ссылки на приведенный ниже код в MSDN .

[ConfigurationPropertyAttribute("maxRequestLength", DefaultValue = )]

Ни одна из ссылок на самом деле не описывает, как его использовать, и я попробовал несколько вещей, но безуспешно. Я хочу изменить этот атрибут только для определенных страниц, которые запрашивают загрузку файла.

Это правильный путь? И как мне это использовать?


Вы уверены, что это ограничение кода, а не ограничение хоста? IIS также имеет предел.
MrChrister

Я был почти уверен, что это ограничение .Net. Ответ ниже работал для меня.
Эдди

Ответы:


406

Этот параметр указывается в вашем файле web.config. Это влияет на все приложение, хотя ... Я не думаю, что вы можете установить его на странице.

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="xxx" />
  </system.web>
</configuration>

«ххх» в КБ. По умолчанию установлено значение 4096 (= 4 МБ).


6
Это заставило меня работать на весь сайт. Сейчас я установил его на 10240 (или 10 МБ). Спасибо!
Эдди

12
Смотрите мой ответ, если вы используете IIS7 +, и это не работает.
4

Можно ли ограничить это одним контроллером?
Гильермо Варини

@ Эдди, у меня есть два файла web.config, я использовал его в обоих, но он не работает. как мне это сделать ?
Ахмад

2
Это можно сделать и по конкретному пути. <location path = "Api / Controller"> <system.web> <authorization> <allow users = "*" /> </ authorization> <httpRuntime maxRequestLength = "102400" /> </system.web> </ location> (тег авторизации не требуется)
nios

182

Для IIS 7+, а также для добавления параметра httpRuntime maxRequestLength также необходимо добавить:

  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="52428800" /> <!--50MB-->
      </requestFiltering>
    </security>
  </system.webServer>

Или в IIS (7):

  • Выберите веб-сайт, который вы хотите включить, чтобы принимать большие загрузки файлов.
  • В главном окне дважды щелкните «Фильтрация запросов».
  • Выберите «Редактировать настройки функции»
  • Изменить «Максимально допустимая длина содержимого (в байтах)»

Я забыл про килобайты: p
Andrew Myhre

10
вам, вероятно, понадобится установить оба maxRequestLength и maxAllowedContentLengthзаставить их работать ... см. stackoverflow.com/questions/6327452/…
MikeM

7
@AndrewMyhre maxAllowedContentLength в байтах, а не в КБ. Документы Microsoft говорят, что по умолчанию 30 МБ.
Дэн Рэндольф

1
@DanRandolph на самом деле значение по умолчанию составляет 30000000 (приблизительно 28,6 МБ), как описано
aaaantoine

Вам определенно нужны обе настройки.
Мохртан

74

Чтобы увеличить ограничение размера загружаемого файла, у нас есть два способа

1. IIS6 или ниже

По умолчанию в ASP.Net максимальный размер файла для загрузки на сервер составляет около 4 МБ . Это значение можно увеличить, изменив атрибут maxRequestLength в web.config .

Помните: maxRequestLenght в КБ

Пример : если вы хотите ограничить загрузку до 15 МБ, установите maxRequestLength на «15360» (15 x 1024).

<system.web>
   <!-- maxRequestLength for asp.net, in KB --> 
   <httpRuntime maxRequestLength="15360" ></httpRuntime> 
</system.web>

2. IIS7 или выше

Немного другой способ, используемый здесь для загрузки файлов. В IIS7 появился модуль фильтрации запросов. При выполнении конвейера до ASP.Net.Средство работы конвейера состоит в том, что сначала проверяется значение IIS ( maxAllowedContentLength ), а затем проверяется значение ASP.NET ( maxRequestLength ). Атрибут maxAllowedContentLength по умолчанию равен 28,61 МБ. Это значение можно увеличить, изменив оба атрибута в одном файле web.config .

Помните: maxAllowedContentLength находится в байтах

Пример : если вы хотите ограничить загрузку до 15 МБ, установите maxRequestLength на «15360» и maxAllowedContentLength на «15728640» (15 x 1024 x 1024).

<system.web>
   <!-- maxRequestLength for asp.net, in KB --> 
   <httpRuntime maxRequestLength="15360" ></httpRuntime> 
</system.web>

<system.webServer>              
   <security> 
      <requestFiltering> 
         <!-- maxAllowedContentLength, for IIS, in bytes --> 
         <requestLimits maxAllowedContentLength="15728640" ></requestLimits>
      </requestFiltering> 
   </security>
</system.webServer>

Ссылка на MSDN : https://msdn.microsoft.com/en-us/library/e1f13641(VS.80).aspx


17

Я считаю, что эта строка в web.config установит максимальный размер загрузки:

<system.web>

        <httpRuntime maxRequestLength="600000"/>
</system.web>

Проведя половину дня, вот что мне помогло !!! Большое спасибо !!!
Сагар Хатри

13

для максимального ограничения 2 ГБ в вашем приложении web.config:

<system.web>
  <compilation debug="true" targetFramework="4.5" />
  <httpRuntime targetFramework="4.5" maxRequestLength="2147483647" executionTimeout="1600" requestLengthDiskThreshold="2147483647" />
</system.web>

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="2147483647" />
    </requestFiltering>
  </security>
</system.webServer>

7

Если это Windows 2003 / IIS 6.0, проверьте AspMaxRequestEntityAllowed = "204800" в файле metabase.xml, расположенном в папке C: \ windows \ system32 \ inetsrv \

Значение по умолчанию "204800" (~ 205Kb), на мой взгляд, слишком мало для большинства пользователей. Просто измените значение на макс.

Если вы не можете сохранить файл после его редактирования, вы должны либо остановить ISS-сервер, либо включить сервер, чтобы разрешить редактирование файла:

альтернативный текст
(источник: itmaskinen.se )

Изменить: я не прочитал вопрос правильно (как установить maxrequest в webconfig). Но эта информация может быть интересна для других людей, многие люди, которые перемещают свои сайты с win2000-сервера на win2003 и имеют работающую функцию загрузки и неожиданно получили ошибку Request.BinaryRead Failed, будут использовать ее. Поэтому я оставляю ответ здесь.


5

У меня такая же проблема на Win 2008 IIS-сервере, я решил проблему с добавлением этой конфигурации в web.config:

<system.web>
    <httpRuntime executionTimeout="3600" maxRequestLength="102400" 
     appRequestQueueLimit="100" requestValidationMode="2.0"
     requestLengthDiskThreshold="10024000"/>
</system.web>

По умолчанию requestLengthDiskThreshold составляет 80000 байт, поэтому он слишком мал для моего приложения. requestLengthDiskThreshold измеряется в байтах, а maxRequestLength выражается в килобайтах.

Проблема присутствует, если приложение использует System.Web.UI.HtmlControls.HtmlInputFileсерверный компонент. Увеличение requestLengthDiskThreshold необходимо для его решения.


1
Согласно msdn.microsoft.com/en-us/library/e1f13641(v=vs.100).aspx «Указывает ограничение для порога буферизации входного потока в килобайтах. Это значение не должно превышать атрибут maxRequestLength». так что это должно быть не больше длины запроса?
Джефф

Да @Jeff, значение requestLengthDiskThreshold должно быть меньше, чем maxRequestLength, но первое выражается в байтах. Если requestLengthDiskThreshold больше, чем maxRequestLength, должно быть выдано исключение ConfigurationErrorsException, чтобы вы могли самостоятельно проверить правильное значение. См. Forums.asp.net/t/…
Массимо Зербини

4

Если вы используете Framework 4.6

<httpRuntime targetFramework="4.6.1" requestValidationMode="2.0" maxRequestLength="10485760"  />

4

Максимальный размер файла может быть ограничен одним контроллером MVC или даже действием.
Для этого можно использовать тег web.config <location>:

<location path="YourAreaName/YourControllerName>/YourActionName>">
  <system.web>
    <!-- 15MB maxRequestLength for asp.net, in KB 15360 -->
    <httpRuntime maxRequestLength="15360" />
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- 15MB maxAllowedContentLength, for IIS, in bytes 15728640 -->
        <requestLimits maxAllowedContentLength="15728640" />
      </requestFiltering>
    </security>
  </system.webServer>
</location>

Или вы можете добавить эти записи в собственный web.config области.


Это должно быть выше и использоваться вместо принятого ответа, так как это более безопасно для проверки размера запроса.
Джонатан Ортега

4

Я знаю, что это старый вопрос.

Вот что вам нужно сделать:

В вашем файле web.config добавьте это в <system.web>:

<!-- 3GB Files / in kilobyte (3072*1024) -->
<httpRuntime targetFramework="4.5" maxRequestLength="3145728"/>

и это под <system.webServer>:

<security>
    <requestFiltering>

      <!-- 3GB Files / in byte (3072*1024*1024) -->
      <requestLimits maxAllowedContentLength="3221225472" />

    </requestFiltering>
</security>

Вы видите в комментарии, как это работает. В одном вы должны иметь sie в байтах, а в другом - в килобайтах. Надеюсь, это поможет.


2

Вы можете написать этот блок кода в файле приложения web.config.

<httpRuntime maxRequestLength="2048576000" />
<sessionState timeout="3600"  />

Написав этот код, вы можете загрузить файл большего размера, чем сейчас


0

Если вы используете sharepoint, вам также следует настроить максимальный размер с помощью Администрирования: kb925083


0

У меня есть запись в блоге о том, как увеличить размер файла для управления загрузкой asp .

Из поста:

По умолчанию элемент управления FileUpload позволяет загружать максимум 4 МБ файла, а время выполнения составляет 110 секунд. Эти свойства можно изменить в разделе httpRuntime файла web.config. Свойство maxRequestLength определяет максимальный размер файла, который можно загрузить. Свойство executeTimeout определяет максимальное время выполнения.


0

Если он работает на вашем локальном компьютере и не работает после развертывания в IIS (я использовал Windows Server 2008 R2), у меня есть решение.

Откройте IIS (inetmgr). Перейдите на свой веб-сайт. С правой стороны перейдите в «Содержимое» («Фильтрация запросов»). Перейдите в «Редактировать настройки функций». Измените максимальный размер содержимого как (Байты, которые вам необходимы). Это будет работать. Вы также можете получить помощь в следующей теме: http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.