Jak zwiększyć maksymalny rozmiar przesyłanego pliku w ASP.NET?


238

Mam formularz z wyjątkiem przesyłania plików w programie ASP.NET. Muszę zwiększyć maksymalny rozmiar wysyłania powyżej domyślnego 4 MB.

Znalazłem w niektórych miejscach odnośniki do poniższego kodu w msdn .

[ConfigurationPropertyAttribute("maxRequestLength", DefaultValue = )]

Żadne z odniesień nie opisuje, jak z niego korzystać, i próbowałem kilku rzeczy bezskutecznie. Chcę zmodyfikować ten atrybut tylko dla niektórych stron, które proszą o przesłanie pliku.

Czy to właściwa trasa? I jak tego użyć?


Czy na pewno jest to ograniczenie kodu, a nie ograniczenie hosta? IIS ma również limit.
MrChrister

Byłem całkiem pewien, że jest to ograniczenie .Net. Poniższa odpowiedź działała dla mnie.
Eddie

Odpowiedzi:


406

To ustawienie znajduje się w pliku web.config. Wpływa to na całą aplikację, ale ... Nie sądzę, że można ustawić ją dla każdej strony.

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

„xxx” jest w KB. Wartość domyślna to 4096 (= 4 MB).


6
Dzięki temu pracowałem dla całej witryny. Na razie ustawiłem go na 10240 (lub 10 MB). Dzięki!
Eddie

12
Zobacz moją odpowiedź, jeśli korzystasz z IIS7 + i to nie działa.
4imble

Czy można ograniczyć to do jednego kontrolera?
Guillermo Varini

@Eddie Mam dwa pliki web.config Użyłem go w obu, ale to nie działa. jak mogę to zrobić ?
Ahmad

2
Można to również zrobić na określonej ścieżce. <ścieżka lokalizacji = "Api / Kontroler"> <system.web> <autoryzacja> <zezwól użytkownikom = "*" /> </authorization> <httpRuntime maxRequestLength = "102400" /> </system.web> </location> (tag autoryzacji nie jest potrzebny)
nios

182

W przypadku IIS 7+, a także dodając ustawienie maxRequestLength httpRuntime, należy również dodać:

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

Lub w IIS (7):

  • Wybierz witrynę, w której chcesz włączyć przesyłanie dużych plików.
  • W oknie głównym kliknij dwukrotnie „Filtrowanie żądań”
  • Wybierz „Edytuj ustawienia funkcji”
  • Zmodyfikuj „Maksymalna dozwolona długość treści (bajty)”

Zapomniałem o kilobajtach: p
Andrew Myhre

10
prawdopodobnie będziesz musiał ustawić oba maxRequestLength i maxAllowedContentLengthsprawić, by zadziałało ... patrz stackoverflow.com/questions/6327452/...
MikeM

7
@AndrewMyhre maxAllowedContentLength jest w bajtach, a nie w KB. Dokumenty Microsoft podają, że domyślnie jest to 30 MB.
Dan Randolph,

1
@ DanRandolph tak naprawdę domyślnie jest to 30000000 (około 28,6
MB

Zdecydowanie potrzebujesz obu ustawień.
mohrtan

74

Aby zwiększyć limit rozmiaru przesyłanego pliku, mamy dwa sposoby

1. IIS6 lub niższy

Domyślnie w ASP.Net maksymalny rozmiar pliku do przesłania na serwer wynosi około 4 MB . Wartość tę można zwiększyć, modyfikując atrybut maxRequestLength w pliku web.config .

Pamiętaj: maxRequestLenght jest w KB

Przykład : jeśli chcesz ograniczyć przesyłanie do 15 MB, ustaw maxRequestLength na „15360” (15 x 1024).

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

2. IIS7 lub wyższy

Nieco inny sposób użyty tutaj do przesyłania plików. IIS7 wprowadził moduł filtrowania żądań. Który wykonał przed ASP.Net.Oznacza sposób działania potoku, że najpierw sprawdza wartość IIS ( maxAllowedContentLength ), a następnie wartość ASP.NET ( maxRequestLength ). Domyślnie atrybut maxAllowedContentLength wynosi 28,61 MB . Wartość tę można zwiększyć, modyfikując oba atrybuty w tym samym pliku web.config .

Pamiętaj: maxAllowedContentLength jest w bajtach

Przykład : jeśli chcesz ograniczyć przesyłanie do 15 MB, ustaw maxRequestLength na „15360”, a maxAllowedContentLength na „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>

Link referencyjny MSDN : https://msdn.microsoft.com/en-us/library/e1f13641(VS.80).aspx


17

Wierzę, że ta linia w pliku web.config ustawi maksymalny rozmiar wysyłania:

<system.web>

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

Po spędzeniu połowy dnia to mi pomogło !!! Wielkie dzięki !!!
Sagar Khatri

13

dla maksymalnego limitu 2 GB, w aplikacji 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

Jeśli jego Windows 2003 / IIS 6.0 a następnie sprawdzić AspMaxRequestEntityAllowed = "204800" w pliku MetaBase.xml znajduje się w folderze C: \ windows \ system32 \ inetsrv \

Domyślna wartość „204800” (~ 205 KB) jest moim zdaniem zbyt niska dla większości użytkowników. Po prostu zmień wartość na wartość, która Twoim zdaniem powinna być maksymalna.

Jeśli nie możesz zapisać pliku po edycji, musisz zatrzymać serwer ISS lub włączyć serwer, aby umożliwić edycję pliku:

alternatywny tekst
(źródło: itmaskinen.se )

Edycja: Nie przeczytałem poprawnie pytania (jak ustawić maksymalne żądanie w webconfig). Ale ta informacja może być interesująca dla innych osób, wiele osób, które przeniosą swoje witryny z win2000-server do win2003 i miały działającą funkcję przesyłania i nagle otrzymały błąd Request.BinaryRead Failed , skorzystają z tego. Więc zostawiam odpowiedź tutaj.


5

Mam ten sam problem na serwerze IIS dla systemu Windows 2008. Rozwiązałem problem dodając tę ​​konfigurację do pliku web.config:

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

requestLengthDiskThreshold domyślnie jest 80000 bajtów więc jest to zbyt małe dla mojej aplikacji. requestLengthDiskThreshold jest mierzony w bajtach, a maxRequestLength jest wyrażony w kilobajtach.

Problem występuje, jeśli aplikacja korzysta ze System.Web.UI.HtmlControls.HtmlInputFileskładnika serwera. Zwiększenie requestLengthDiskThreshold jest konieczne do jego rozwiązania.


1
Według msdn.microsoft.com/en-us/library/e1f13641(v=vs.100).aspx „Określa limit progu buforowania strumienia wejściowego, w kilobajtach. Wartość ta nie powinna przekraczać atrybutu maxRequestLength.” więc powinna być co najwyżej taka sama jak długość żądania?
Jeff

Tak @Jeff, wartość requestLengthDiskThreshold powinna być mniejsza niż maxRequestLength, ale pierwsza wyrażona jest w bajtach. Jeśli requestLengthDiskThreshold jest większy niż maxRequestLength, należy zgłosić wyjątek ConfigurationErrorsException, abyś mógł samodzielnie przetestować poprawną wartość. Zobacz forums.asp.net/t/…
Massimo Zerbini,

4

Jeśli używasz Framework 4.6

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

4

Maksymalny rozmiar pliku można ograniczyć do pojedynczego kontrolera MVC lub nawet do akcji.
W tym celu można użyć znacznika 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>

Lub możesz dodać te wpisy we własnym web.config obszaru.


Powinien być wyższy i używany zamiast akceptowanej odpowiedzi, ponieważ jest to bardziej bezpieczne do sprawdzania poprawności wielkości żądania.
Jonathan Ortega

4

Wiem, że to stare pytanie.

Oto co musisz zrobić:

W pliku web.config dodaj to do <system.web>:

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

i to pod <system.webServer>:

<security>
    <requestFiltering>

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

    </requestFiltering>
</security>

W komentarzu widać, jak to działa. W jednym musisz sie sie w bajtach, aw drugim w kilobajtach. Mam nadzieję, że to pomaga.


2

Możesz napisać ten blok kodu w pliku web.config aplikacji.

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

Pisząc ten kod, możesz przesłać większy plik niż teraz


0

Jeśli używasz programu sharepoint, powinieneś również skonfigurować maksymalny rozmiar za pomocą Narzędzi administracyjnych: kb925083


0

Mam wpis na blogu o tym, jak zwiększyć rozmiar pliku w celu kontroli przesyłania asp .

Z postu:

Domyślnie kontrolka FileUpload pozwala na przesłanie maksymalnie 4 MB pliku, a limit czasu wykonania wynosi 110 sekund. Te właściwości można zmienić w sekcji httpRuntime pliku web.config. Właściwość maxRequestLength określa maksymalny rozmiar pliku, który można przesłać. Właściwość wykonawcza określa maksymalny czas wykonania.


0

Jeśli działa na komputerze lokalnym i nie działa po wdrożeniu w IIS (korzystałem z systemu Windows Server 2008 R2), mam rozwiązanie.

Otwórz IIS (inetmgr) Przejdź na swoją stronę Po prawej stronie przejdź do Treści (Filtrowanie żądań) Przejdź do Edytuj ustawienia funkcji Zmień maksymalny rozmiar zawartości jako (Wymagane bajty) To zadziała. Możesz także uzyskać pomoc, śledząc wątek http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.