Estou recebendo o erro Duração máxima da solicitação excedida quando estou tentando fazer upload de um vídeo no meu site.
Como faço para corrigir isso?
Estou recebendo o erro Duração máxima da solicitação excedida quando estou tentando fazer upload de um vídeo no meu site.
Como faço para corrigir isso?
Respostas:
Se você estiver usando o IIS para hospedar seu aplicativo, o tamanho padrão do arquivo de upload será 4 MB. Para aumentá-lo, use esta seção abaixo em seu web.config
-
<configuration>
<system.web>
<httpRuntime maxRequestLength="1048576" />
</system.web>
</configuration>
Para o IIS7 e superior, você também precisa adicionar as linhas abaixo:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
Nota :
maxRequestLength
é medido em kilobytesmaxAllowedContentLength
é medido em bytes é por isso que os valores diferem neste exemplo de configuração. (Ambos são equivalentes a 1 GB.)
Web.config
em vez da uma dentro da Views
pasta
Não acho que tenha sido mencionado aqui, mas para que isso funcione, tive que fornecer esses dois valores no web.config:
No system.web
<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />
E em system.webServer
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
IMPORTANTE : Esses dois valores devem corresponder. Nesse caso, meu upload máximo é de 1024 megabytes.
maxRequestLength possui 1048576 KILOBYTES e maxAllowedContentLength tem 1073741824 BYTES .
Eu sei que é óbvio, mas é fácil ignorar.
web.config
arquivo raiz do projeto .
Pode ser interessante notar que você pode limitar essa alteração ao URL que você espera que seja usado para o upload, e não para todo o site.
<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 no caso de alguém estar procurando uma maneira de lidar com essa exceção e mostrar uma explicação significativa para o usuário (algo como "Você está fazendo upload de um arquivo muito 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 ou posterior necessário)
HttpContext.Current.ClearError()
era necessário para permitir Response.Redirect()
que funcionasse corretamente. Em termos de web.config
funciona apenas com o maxRequestLength
atributo de httpRuntime
.
onchange
evento no botão de upload e comparando o tamanho do arquivo de upload com o limite máximo de upload.
O tamanho máximo da solicitação é, por padrão, 4MB (4096 KB)
Isso é explicado aqui .
O artigo acima também explica como corrigir esse problema :)
Se você não pode atualizar os arquivos de configuração, mas controlar o código que lida com os uploads de arquivos, use HttpContext.Current.Request.GetBufferlessInputStream(true)
.
O true
valor para o disableMaxRequestLength
parâmetro diz à estrutura para ignorar os limites de solicitação configurados.
Para obter uma descrição detalhada, visite https://msdn.microsoft.com/en-us/library/hh195568(v=vs.110).aspx
Para resumir todas as respostas em um único local:
<system.web>
<httpRuntime targetFramework="4.5.2" maxRequestLength="1048576"/>
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
Regras:
Notas:
mais informações MSDN
maxRequestLength (comprimento em KB) Aqui como ex. Peguei 1024 (1MB) maxAllowedContentLength (comprimento em bytes) deve ser igual ao seu maxRequestLength (1048576 bytes = 1MB).
<system.web>
<httpRuntime maxRequestLength="1024" executionTimeout="3600" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1048576"/>
</requestFiltering>
</security>
</system.webServer>
Se você tiver uma solicitação acessando um aplicativo no site, defina maxRequestLength na raiz web.config. O maxRequestLength no web.config dos aplicativos parece ser ignorado.
httpRuntime maxRequestLength="###
e requestLimits maxAllowedContentLength
em uma configuração da web no nível raiz, não no nível do sub-aplicativo.
Fui enganado pelo fato de nosso arquivo web.config possuir várias seções system.web: funcionou quando adicionei <httpRuntime maxRequestLength = "1048576" /> à seção system.web no nível de configuração.
Eu tive que editar o C:\Windows\System32\inetsrv\config\applicationHost.config
arquivo e adicionar <requestLimits maxAllowedContentLength="1073741824" />
no final do ...
<configuration>
<system.webServer>
<security>
<requestFiltering>
seção.
Conforme este artigo de suporte da Microsoft
applicationHost.config
.
Eu posso adicionar à web de configuração descompilada
<system.web>
<httpRuntime maxRequestLength="1024" executionTimeout="3600" />
<compilation debug="true"/>
</system.web>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1048576"/>
</requestFiltering>
</security>
executionTimeout
atributo não tem nada a ver com o que é solicitado, nem a compilation
tag.