Ricevo l'errore Lunghezza massima richiesta superata quando provo a caricare un video nel mio sito.
Come posso risolvere questo problema?
Ricevo l'errore Lunghezza massima richiesta superata quando provo a caricare un video nel mio sito.
Come posso risolvere questo problema?
Risposte:
Se si utilizza IIS per l'hosting dell'applicazione, la dimensione del file di caricamento predefinita è 4 MB. Per aumentarlo, utilizza questa sezione di seguito nella tua web.config
-
<configuration>
<system.web>
<httpRuntime maxRequestLength="1048576" />
</system.web>
</configuration>
Per IIS7 e versioni successive, devi anche aggiungere le righe seguenti:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
Nota :
maxRequestLength
è misurato in kilobytemaxAllowedContentLength
è misurato in byte motivo per cui i valori differiscono in questo esempio di configurazione. (Entrambi equivalgono a 1 GB.)
Web.config
anziché a quella all'interno della Views
cartella
Non penso che sia stato menzionato qui, ma per farlo funzionare, ho dovuto fornire entrambi questi valori nel web.config:
In system.web
<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />
E dentro system.webServer
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
IMPORTANTE : entrambi questi valori devono corrispondere. In questo caso, il mio caricamento massimo è di 1024 megabyte.
maxRequestLength ha 1048576 KILOBYTES e maxAllowedContentLength ha 1073741824 BYTES .
So che è ovvio, ma è facile da trascurare.
web.config
file root del progetto .
Vale la pena notare che potresti voler limitare questa modifica all'URL che prevedi venga utilizzato per il caricamento piuttosto che per l'intero sito.
<location path="Documents/Upload">
<system.web>
<!-- 50MB in kilobytes, default is 4096 or 4MB-->
<httpRuntime maxRequestLength="51200" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- 50MB in bytes, default is 30000000 or approx. 28.6102 Mb-->
<requestLimits maxAllowedContentLength="52428800" />
</requestFiltering>
</security>
</system.webServer>
</location>
E nel caso in cui qualcuno stia cercando un modo per gestire questa eccezione e mostrare una spiegazione significativa all'utente (qualcosa come "Stai caricando un file troppo grande"):
//Global.asax
private void Application_Error(object sender, EventArgs e)
{
var ex = Server.GetLastError();
var httpException = ex as HttpException ?? ex.InnerException as HttpException;
if(httpException == null) return;
if (((System.Web.HttpException)httpException.InnerException).WebEventCode == System.Web.Management.WebEventCodes.RuntimeErrorPostTooLarge)
{
//handle the error
Response.Write("Too big a file, dude"); //for example
}
}
(ASP.NET 4 o successivo richiesto)
HttpContext.Current.ClearError()
era necessario per consentire il Response.Redirect()
corretto funzionamento. In termini di web.config
funziona solo con l' maxRequestLength
attributo di httpRuntime
.
onchange
evento sul pulsante di caricamento e confrontando la dimensione del file di caricamento con il limite massimo di caricamento.
Se non è possibile aggiornare i file di configurazione ma controllare il codice che gestisce i caricamenti dei file, utilizzare HttpContext.Current.Request.GetBufferlessInputStream(true)
.
Il true
valore per disableMaxRequestLength
parametro indica al framework di ignorare i limiti di richiesta configurati.
Per una descrizione dettagliata visitare https://msdn.microsoft.com/en-us/library/hh195568(v=vs.110).aspx
Per riassumere tutte le risposte in un unico posto:
<system.web>
<httpRuntime targetFramework="4.5.2" maxRequestLength="1048576"/>
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
Regole:
Appunti:
maggiori informazioni MSDN
maxRequestLength (lunghezza in KB) Qui come ex. Ho preso 1024 (1 MB) maxAllowedContentLength (lunghezza in byte) dovrebbe essere uguale a maxRequestLength (1048576 byte = 1 MB).
<system.web>
<httpRuntime maxRequestLength="1024" executionTimeout="3600" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1048576"/>
</requestFiltering>
</security>
</system.webServer>
Se hai una richiesta che va a un'applicazione nel sito, assicurati di impostare maxRequestLength nel root web.config. La maxRequestLength nel web.config dell'applicazione sembra essere ignorata.
httpRuntime maxRequestLength="###
e requestLimits maxAllowedContentLength
in una configurazione Web a livello di radice, non a livello di app secondaria.
Sono stato inciampato dal fatto che il nostro file web.config ha più sezioni system.web: ha funzionato quando ho aggiunto <httpRuntime maxRequestLength = "1048576" /> alla sezione system.web che a livello di configurazione.
Ho dovuto modificare il C:\Windows\System32\inetsrv\config\applicationHost.config
file e aggiungere <requestLimits maxAllowedContentLength="1073741824" />
alla fine del ...
<configuration>
<system.webServer>
<security>
<requestFiltering>
sezione.
applicationHost.config
.
Posso aggiungere alla configurazione web non compilata
<system.web>
<httpRuntime maxRequestLength="1024" executionTimeout="3600" />
<compilation debug="true"/>
</system.web>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1048576"/>
</requestFiltering>
</security>
executionTimeout
attributo non ha nulla a che fare con ciò che viene richiesto e nemmeno il compilation
tag.