Come aumentare la dimensione massima del file di caricamento in ASP.NET?


238

Ho un modulo che esclude un caricamento di file in ASP.NET. Devo aumentare le dimensioni massime del caricamento oltre i 4 MB predefiniti.

Ho trovato in alcuni punti facendo riferimento al codice seguente in msdn .

[ConfigurationPropertyAttribute("maxRequestLength", DefaultValue = )]

Nessuno dei riferimenti in realtà descrive come usarlo, e ho provato diverse cose senza successo. Voglio modificare questo attributo solo per alcune pagine che richiedono il caricamento di file.

È questo il percorso corretto da prendere? E come lo uso?


Sei sicuro che si tratti di una limitazione del codice e non di una limitazione dell'host? Anche IIS ha un limite.
MrChrister,

Ero abbastanza sicuro che fosse una limitazione .Net. La risposta qui sotto ha funzionato per me.
Eddie,

Risposte:


406

Questa impostazione va nel tuo file web.config. Colpisce l'intera applicazione, però ... Non penso che tu possa impostarla per pagina.

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

"xxx" è in KB. L'impostazione predefinita è 4096 (= 4 MB).


6
Questo mi ha fatto lavorare per tutto il sito. L'ho impostato su 10240 (o 10 MB) per ora. Grazie!
Eddie,

12
Vedi la mia risposta se stai eseguendo IIS7 + e questo non funziona.
4

È possibile limitare questo a un controller?
Guillermo Varini,

@Eddie ho due file web.config che l'ho usato in entrambi ma non funziona. Come posso farlo ?
Ahmad,

2
Questo è possibile anche su un percorso specifico. <location path = "Api / Controller"> <system.web> <authorization> <allow users = "*" /> </authorization> <httpRuntime maxRequestLength = "102400" /> </system.web> </location> (tag di autorizzazione non necessario)
nios

182

Per IIS 7+, oltre ad aggiungere l'impostazione httpRuntime maxRequestLength, devi anche aggiungere:

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

O in IIS (7):

  • Seleziona il sito Web che desideri abilitare per accettare caricamenti di file di grandi dimensioni.
  • Nella finestra principale fai doppio clic su "Richiedi filtro"
  • Seleziona "Modifica impostazioni funzionalità"
  • Modifica la "Lunghezza massima consentita del contenuto (byte)"

Ho dimenticato i kilobyte: p
Andrew Myhre,

10
sarà probabilmente necessario per impostare sia maxRequestLength e maxAllowedContentLengthper farlo funzionare ... vedere stackoverflow.com/questions/6327452/...
MikeM

7
@AndrewMyhre maxAllowedContentLength è in byte, non in KB. I documenti Microsoft affermano che l'impostazione predefinita è 30 MB.
Dan Randolph,

1
@DanRandolph attualmente il valore predefinito è 30000000 (circa 28,6 MB), come documentato su iis.net/configreference/system.webserver/security/…
aaaantoine

Hai sicuramente bisogno di entrambe le impostazioni.
Mohrtan,

74

Per aumentare il limite di dimensioni del file di caricamento abbiamo due modi

1. IIS6 o inferiore

Per impostazione predefinita, in ASP.Net la dimensione massima di un file da caricare sul server è di circa 4 MB . Questo valore può essere aumentato modificando l' attributo maxRequestLength in web.config .

Ricorda: maxRequestLenght è in KB

Esempio : se si desidera limitare i caricamenti a 15 MB, impostare maxRequestLength su “15360” (15 x 1024).

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

2. IIS7 o versione successiva

Un modo leggermente diverso utilizzato qui per caricare i file. IIS7 ha introdotto il modulo di filtro delle richieste. Che eseguito prima di ASP.Net. Il modo in cui funziona la pipeline è che il valore IIS ( maxAllowedContentLength ) sia verificato prima, quindi sia controllato il valore ASP.NET ( maxRequestLength ). L'attributo maxAllowedContentLength per impostazione predefinita è 28,61 MB . Questo valore può essere aumentato modificando entrambi gli attributi nello stesso web.config .

Ricorda: maxAllowedContentLength è in byte

Esempio : se si desidera limitare i caricamenti a 15 MB, impostare maxRequestLength su “15360” e maxAllowedContentLength su "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 di riferimento MSDN : https://msdn.microsoft.com/en-us/library/e1f13641(VS.80).aspx


17

Credo che questa riga in web.config imposterà la dimensione massima di upload:

<system.web>

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

Dopo aver trascorso metà della giornata, questo è ciò che mi ha aiutato !!! Molte grazie !!!
Sagar Khatri,

13

per un limite massimo di 2 GB, nell'applicazione 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

Se è Windows 2003 / IIS 6.0, controlla AspMaxRequestEntityAllowed = "204800" nel file metabase.xml situato nella cartella C: \ windows \ system32 \ inetsrv \

Il valore predefinito di "204800" (~ 205Kb) è a mio avviso troppo basso per la maggior parte degli utenti. Basta cambiare il valore in quello che pensi dovrebbe essere max.

Se non è possibile salvare il file dopo averlo modificato, è necessario arrestare il server ISS o abilitare il server per consentire la modifica del file:

testo alternativo
(fonte: itmaskinen.se )

Modifica: non ho letto correttamente la domanda (come impostare la richiesta massima in webconfig). Ma questo può essere di informatin interrest per altre persone, molte persone che si spostano i loro siti da Win2000-server per Win2003 e aveva un upload-funzione di lavoro e improvvisamente avuto l' Request.BinaryRead Impossibile errore avrà uso di esso. Quindi lascio qui la risposta.


5

Ho lo stesso problema in un server IIS di Windows 2008, ho risolto il problema aggiungendo questa configurazione in web.config:

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

il requestLengthDiskThreshold di default è 80000 byte quindi è troppo piccolo per la mia applicazione. requestLengthDiskThreshold è misurato in byte e maxRequestLength è espresso in Kbyte.

Il problema è presente se l'applicazione utilizza un System.Web.UI.HtmlControls.HtmlInputFilecomponente server. È necessario aumentare la richiestaLengthDiskThreshold per risolverlo.


1
Secondo msdn.microsoft.com/en-us/library/e1f13641(v=vs.100).aspx "Specifica il limite per la soglia di buffering del flusso di input, in kilobyte. Questo valore non deve superare l'attributo maxRequestLength." quindi dovrebbe essere al massimo uguale alla lunghezza della richiesta?
Jeff,

Sì @Jeff, il valore di requestLengthDiskThreshold dovrebbe essere inferiore a maxRequestLength, ma il primo è espresso in byte. Se requestLengthDiskThreshold è maggiore di maxRequestLength, dovrebbe essere generata una ConfigurationErrorsException, in modo da poter testare il valore corretto da soli. Vedi forums.asp.net/t/…
Massimo Zerbini,

4

Se si utilizza Framework 4.6

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

4

La dimensione massima del file può essere limitata a un singolo controller MVC o anche a un'azione.
Il tag <location> web.config può essere usato per questo:

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

Oppure puoi aggiungere queste voci nel proprio web.config dell'area.


Questo dovrebbe essere più alto e utilizzato al posto della risposta accettata, poiché è più sicuro per la convalida della dimensione della richiesta.
Jonathan Ortega,

4

So che è una vecchia domanda.

Quindi questo è quello che devi fare:

Nel tuo file web.config, aggiungi questo in <system.web>:

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

e questo sotto <system.webServer>:

<security>
    <requestFiltering>

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

    </requestFiltering>
</security>

Vedi nel commento come funziona. In uno devi avere il sie in byte e nell'altro in kilobyte. Spero che aiuti.


2

È possibile scrivere quel blocco di codice nel file web.config dell'applicazione.

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

Scrivendo quel codice puoi caricare un file più grande di adesso


0

Se si utilizza sharepoint è necessario configurare anche la dimensione massima con Strumenti di amministrazione: kb925083


0

Ho un post sul blog su come aumentare le dimensioni del file per il controllo del caricamento ASP .

Dal post:

Per impostazione predefinita, il controllo FileUpload consente di caricare un massimo di 4 MB di file e il timeout di esecuzione è di 110 secondi. Queste proprietà possono essere modificate dalla sezione httpRuntime del file web.config. La proprietà maxRequestLength determina la dimensione massima del file che può essere caricata. La proprietà esecuzioneTimeout determina il tempo massimo per l'esecuzione.



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.