Як збільшити максимальний розмір файлу завантаження в ASP.NET?


238

У мене є форма, яка виключає завантаження файлу в ASP.NET. Мені потрібно збільшити максимальний розмір завантаження вище 4 Мб за замовчуванням.

Я в деяких місцях знайшов посилання на код нижче в msdn .

[ConfigurationPropertyAttribute("maxRequestLength", DefaultValue = )]

Жодна з посилань насправді не описує, як ним користуватися, і я спробував кілька речей без успіху. Я хочу змінити цей атрибут лише для певних сторінок, які просять завантажити файл.

Це правильний маршрут? І як я цим користуюся?


Ви впевнені, що це обмеження коду, а не обмеження хосту? IIS також має обмеження.
MrChrister

Я був впевнений, що це обмеження. Відповідь нижче працювала для мене.
Едді

Відповіді:


406

Цей параметр зберігається у вашому файлі web.config. Однак це впливає на всю програму ... Я не думаю, що ви можете встановити її на кожній сторінці.

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

"ххх" знаходиться в КБ. За замовчуванням - 4096 (= 4 Мб).


6
Це змусило мене працювати на сайті. Я встановив її зараз на 10240 (або 10 МБ). Дякую!
Едді

12
Дивіться мою відповідь, якщо ви працюєте з IIS7 + і це не працює.
4imble

Чи можна обмежити це одним контролером?
Гільєрмо Варіні

@Eddie У мене є два файли web.config, я використовував його в обох, але він не працює. як я можу це зробити?
Ахмад

2
Це можливо зробити і на певному шляху. <location path = "Api / Controller"> <system.web> <authorization> <enable 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 МБ), як це зафіксовано на iis.net/configreference/system.webserver/security/…
aaaantoine

Вам обов'язково потрібні обидва налаштування.
mohrtan

74

Для збільшення обмеження розміру файлу для завантаження у нас є два способи

1. IIS6 або нижче

За замовчуванням в ASP.Net максимальний розмір файлу для завантаження на сервер становить близько 4 Мб . Це значення можна збільшити, змінивши атрибут maxRequestLength в web.config .

Пам'ятайте: maxRequestLenght знаходиться в Кб

Приклад : якщо ви хочете обмежити завантаження до 15 МБ, встановіть для maxRequestLength значення "15360" (15 х 1024).

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

2. IIS7 або вище

Дещо інший спосіб, який використовується тут для завантаження файлів. IIS7 запровадив модуль фільтрації запитів . Що виконується перед ASP.Net.Means способом роботи конвеєра, це те, що значення IIS ( maxAllowedContentLength ) спочатку перевіряється, а потім перевіряється значення ASP.NET ( maxRequestLength ). Атрибут maxAllowedContentLength за замовчуванням до 28,61 Мб . Це значення можна збільшити, змінивши обидва атрибути в одному web.config .

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

Приклад : якщо ви хочете обмежити завантаження до 15 МБ, встановіть для maxRequestLength значення "15360", а maxAllowedContentLength - "15728640" (15 х 1024 х 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-сервер, або включити сервер, щоб дозволити редагування файлу:

alt текст
(джерело: itmaskinen.se )

Редагувати: Я не читав питання правильно (як встановити maxrequest у webconfig). Але цей інформатик може бути цікавим для інших людей, багато людей, які переміщують свої сайти з win2000-сервера на win2003 і мали робочу функцію завантаження, і раптом отримали помилку Request.BinaryRead Failed, і її використовуватимуть. Тому я залишаю відповідь тут.


5

У мене така ж проблема на сервері IIS Win 2008, я вирішив проблему, додавши цю конфігурацію в 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серверний компонент. Збільшення запитуLengthDiskThreshold необхідно для його вирішення.


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>

Ви бачите в коментарі, як це працює. В одному потрібно мати сито в байтах, а в іншому - в кілобайтах. Сподіваюся, що це допомагає.


2

Цей блок коду можна записати у файл програми web.config програми.

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

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


0

Якщо ви використовуєте sharepoint, вам слід також налаштувати максимальний розмір за допомогою адміністративних інструментів: kb925083


0

У мене є повідомлення в блозі про те, як збільшити розмір файлу для керування завантаженням asp .

З поста:

За замовчуванням керування FileUpload дозволяє завантажувати максимум 4 МБ файлу, а час очікування виконання - 110 секунд. Ці властивості можна змінити з розділу httpRuntime файлу web.config. Властивість maxRequestLength визначає максимальний розмір файлу, який можна завантажити. Властивість ExecuTimeout визначає максимальний час виконання.


0

Якщо він працює у вашій локальній машині і не працює після розгортання в IIS (я використовував Windows Server 2008 R2), у мене є рішення.

Відкрити IIS (inetmgr) Перейти на веб-сайт. Праворуч перейдіть до вмісту (запит на фільтрування). Перейдіть до редагування параметрів функції. Змініть максимальний розмір вмісту як (потрібні байти). Це буде працювати. Ви також можете скористатися допомогою наступного потоку http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits


0

Якщо ви використовуєте ssl cert, налаштування налаштування F5 для трубопроводу ssl. Важливо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.