Wie kann ich die maximale Größe der Upload-Datei in ASP.NET erhöhen?


237

Ich habe ein Formular, das einen Datei-Upload in ASP.NET ausschließt. Ich muss die maximale Upload-Größe auf über 4 MB erhöhen.

Ich habe an bestimmten Stellen auf den folgenden Code bei msdn verwiesen .

[ConfigurationPropertyAttribute("maxRequestLength", DefaultValue = )]

Keine der Referenzen beschreibt tatsächlich, wie man es benutzt, und ich habe mehrere Dinge ohne Erfolg ausprobiert. Ich möchte dieses Attribut nur für bestimmte Seiten ändern, die zum Hochladen von Dateien aufgefordert werden.

Ist dies der richtige Weg? Und wie benutze ich das?


Sind Sie sicher, dass es sich um eine Codebeschränkung und nicht um eine Hostbeschränkung handelt? IIS hat auch eine Grenze.
MrChrister

Ich war mir ziemlich sicher, dass es sich um eine .Net-Einschränkung handelt. Die Antwort unten hat bei mir funktioniert.
Eddie

Antworten:


406

Diese Einstellung wird in Ihre Datei web.config übernommen. Es betrifft jedoch die gesamte Anwendung ... Ich glaube nicht, dass Sie es pro Seite festlegen können.

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

"xxx" ist in KB. Der Standardwert ist 4096 (= 4 MB).


6
Dies brachte mich dazu, für die gesamte Website zu arbeiten. Ich habe es vorerst auf 10240 (oder 10 MB) eingestellt. Vielen Dank!
Eddie

12
Siehe meine Antwort, wenn Sie IIS7 + ausführen und dies nicht funktioniert.
4imble

Ist es möglich, dies auf einen Controller zu beschränken?
Guillermo Varini

@Eddie Ich habe zwei web.config-Dateien, die ich in beiden verwendet habe, aber es funktioniert nicht. wie kann ich es tun ?
Ahmad

2
Dies ist auch auf einem bestimmten Pfad möglich. <location path = "Api / Controller"> <system.web> <authorization> <allow users = "*" /> </ authorisation> <httpRuntime maxRequestLength = "102400" /> </system.web> </ location> (Autorisierungs-Tag nicht erforderlich)
Nios

181

Für IIS 7+ müssen Sie neben dem Hinzufügen der Einstellung httpRuntime maxRequestLength auch Folgendes hinzufügen:

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

Oder in IIS (7):

  • Wählen Sie die Website aus, auf der große Datei-Uploads akzeptiert werden sollen.
  • Doppelklicken Sie im Hauptfenster auf "Filterung anfordern".
  • Wählen Sie "Funktionseinstellungen bearbeiten".
  • Ändern Sie die "Maximal zulässige Inhaltslänge (Bytes)".

Ich habe Kilobyte vergessen: p
Andrew Myhre

10
Sie müssen wahrscheinlich beides einstellen maxRequestLengthund maxAllowedContentLengthes zum Laufen
bringen

7
@AndrewMyhre maxAllowedContentLength wird in Bytes angegeben, nicht in KB. Laut Microsoft-Dokumenten beträgt der Standardwert 30 MB.
Dan Randolph

1
@ DanRandolph tatsächlich ist der Standard 30000000 (ungefähr 28,6 MB), wie unter iis.net/configreference/system.webserver/security/…
aaaantoine

Sie benötigen definitiv beide Einstellungen.
Mohrtan

74

Um die Größenbeschränkung für das Hochladen von Dateien zu erhöhen, haben wir zwei Möglichkeiten

1. IIS6 oder niedriger

Standardmäßig beträgt in ASP.Net die maximale Größe einer Datei, die auf den Server hochgeladen werden soll, etwa 4 MB . Dieser Wert kann durch Modifizieren der erhöht werden maxRequestLength Attribut in web.config .

Denken Sie daran: maxRequestLenght ist in KB

Beispiel : Wenn Sie Uploads auf 15 MB beschränken möchten, setzen Sie maxRequestLength auf „15360“ (15 x 1024).

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

2. IIS7 oder höher

Eine etwas andere Methode zum Hochladen von Dateien. IIS7 hat ein Anforderungsfilterungsmodul eingeführt. Vor ASP.Net ausgeführt. Die Pipeline funktioniert so, dass zuerst der IIS-Wert ( maxAllowedContentLength ) und dann der ASP.NET-Wert ( maxRequestLength ) überprüft werden. Das Attribut maxAllowedContentLength ist standardmäßig 28,61 MB groß. Dieser Wert kann erhöht werden, indem beide Attribute in derselben web.config geändert werden .

Denken Sie daran: maxAllowedContentLength wird in Byte angegeben

Beispiel : Wenn Sie Uploads auf 15 MB beschränken möchten, setzen Sie maxRequestLength auf "15360" und maxAllowedContentLength auf "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-Referenzlink : https://msdn.microsoft.com/en-us/library/e1f13641(VS.80).aspx


17

Ich glaube, diese Zeile in der web.config legt die maximale Upload-Größe fest:

<system.web>

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

Nachdem ich den halben Tag verbracht habe, hat mir das geholfen !!! Vielen Dank !!!
Sagar Khatri

13

Für ein maximales Limit von 2 GB in Ihrer Anwendung 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

Wenn Windows 2003 / IIS 6.0 verwendet wird, überprüfen Sie AspMaxRequestEntityAllowed = "204800" in der Datei metabase.xml im Ordner C: \ windows \ system32 \ inetsrv \

Der Standardwert von "204800" (~ 205 KB) ist meiner Meinung nach für die meisten Benutzer zu niedrig. Ändern Sie einfach den Wert auf den Wert, der Ihrer Meinung nach max.

Wenn Sie die Datei nach dem Bearbeiten nicht speichern können, müssen Sie entweder den ISS-Server stoppen oder den Server aktivieren, um das Bearbeiten der Datei zu ermöglichen:

Alt-Text
(Quelle: itmaskinen.se )

Bearbeiten: Ich habe die Frage nicht richtig gelesen (wie man die maxrequest in webconfig einstellt). Diese Informationen können jedoch für andere Personen von Interesse sein. Viele Personen, die ihre Websites von win2000-server auf win2003 verschieben und über eine funktionierende Upload-Funktion verfügen und plötzlich den Fehler Request.BinaryRead Failed erhalten , werden davon verwendet. Also lasse ich die Antwort hier.


5

Ich habe das gleiche Problem auf einem Win 2008 IIS-Server. Ich habe das Problem beim Hinzufügen dieser Konfiguration in der web.config gelöst:

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

Der requestLengthDiskThreshold beträgt standardmäßig 80000 Byte, ist also für meine Anwendung zu klein. requestLengthDiskThreshold wird in Bytes gemessen und maxRequestLength in KB.

Das Problem liegt vor, wenn die Anwendung eine System.Web.UI.HtmlControls.HtmlInputFileServerkomponente verwendet. Das Erhöhen des requestLengthDiskThreshold ist erforderlich, um das Problem zu beheben.


1
Laut msdn.microsoft.com/en-us/library/e1f13641(v=vs.100).aspx "Gibt den Grenzwert für den Schwellenwert für die Pufferung des Eingabestreams in Kilobyte an. Dieser Wert sollte das Attribut maxRequestLength nicht überschreiten." sollte es also höchstens der anforderungslänge entsprechen?
Jeff

Ja @Jeff, der Wert von requestLengthDiskThreshold sollte kleiner als maxRequestLength sein, aber der erste wird in Bytes ausgedrückt. Wenn requestLengthDiskThreshold größer als maxRequestLength ist, sollte eine ConfigurationErrorsException ausgelöst werden, damit Sie den richtigen Wert selbst testen können. Siehe forums.asp.net/t/…
Massimo Zerbini

4

Wenn Sie Framework 4.6 verwenden

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

4

Die maximale Dateigröße kann auf einen einzelnen MVC-Controller oder sogar auf eine Aktion beschränkt werden.
Das Tag web.config <Speicherort> kann hierfür verwendet werden:

<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>

Oder Sie können diese Einträge in der eigenen web.config des Bereichs hinzufügen.


Dies sollte höher sein und anstelle der akzeptierten Antwort verwendet werden, da dies für die Überprüfung der Anforderungsgröße sicherer ist.
Jonathan Ortega

4

Ich weiß, dass es eine alte Frage ist.

Das müssen Sie also tun:

Fügen Sie in Ihrer web.config-Datei Folgendes hinzu <system.web>:

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

und das unter <system.webServer>:

<security>
    <requestFiltering>

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

    </requestFiltering>
</security>

Sie sehen im Kommentar, wie das funktioniert. In einem müssen Sie sie in Bytes und in dem anderen in Kilobyte haben. Hoffentlich hilft das.


2

Sie können diesen Codeblock in die Datei web.config Ihrer Anwendung schreiben.

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

Durch Schreiben dieses Codes können Sie eine größere Datei als jetzt hochladen


0

Wenn Sie Sharepoint verwenden, sollten Sie die maximale Größe auch mit den Verwaltungstools konfigurieren: kb925083


0

Ich habe einen Blog-Beitrag darüber, wie man die Dateigröße für die Asp-Upload-Kontrolle erhöht .

Aus der Post:

Standardmäßig ermöglicht das FileUpload-Steuerelement das Hochladen von maximal 4 MB Dateien und das Ausführungszeitlimit beträgt 110 Sekunden. Diese Eigenschaften können im Abschnitt httpRuntime der Datei web.config geändert werden. Die Eigenschaft maxRequestLength bestimmt die maximale Dateigröße, die hochgeladen werden kann. Die Eigenschaft executeTimeout bestimmt die maximale Ausführungszeit.


0

Wenn es auf Ihrem lokalen Computer funktioniert und nach der Bereitstellung in IIS (ich habe Windows Server 2008 R2 verwendet) nicht funktioniert, habe ich eine Lösung.

Öffnen Sie IIS (inetmgr). Gehen Sie zu Ihrer Website. Gehen Sie auf der rechten Seite zu Inhalt (Anforderungsfilterung). Gehen Sie zu Bearbeitungsfeature-Einstellungen. Ändern Sie die maximale Inhaltsgröße als (benötigte Bytes). Dies funktioniert. Sie können auch Hilfe von folgendem Thread http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits erhalten


0

Wenn Sie ssl cert verwenden, konfigurieren Sie die Einstellungen für die SSL-Pipeline F5. Wichtig.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.