Como aumentar o tamanho máximo do arquivo de upload no ASP.NET?

237

Eu tenho um formulário que excede um upload de arquivo no ASP.NET. Preciso aumentar o tamanho máximo de upload para acima do padrão de 4 MB.

Eu encontrei em certos lugares referenciando o código abaixo em msdn .

[ConfigurationPropertyAttribute("maxRequestLength", DefaultValue = )]

Nenhuma das referências realmente descreve como usá-lo, e eu tentei várias coisas sem sucesso. Eu só quero modificar esse atributo para determinadas páginas que estão pedindo o upload de arquivos.

Esse é o caminho correto a seguir? E como eu uso isso?

Eddie
fonte
Você tem certeza de que é uma limitação de código e não uma limitação de host? O IIS também tem um limite.
MrChrister
Eu tinha certeza de que era uma limitação .Net. A resposta abaixo funcionou para mim.
Eddie

Respostas:

406

Essa configuração está no seu arquivo web.config. Porém, isso afeta o aplicativo inteiro ... Não acho que você possa defini-lo por página.

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

"xxx" está em KB. O padrão é 4096 (= 4 MB).

Eric Rosenberger
fonte
6
Isso me levou a trabalhar em todo o site. Eu configurei para 10240 (ou 10 MB) por enquanto. Obrigado!
Eddie
12
Veja minha resposta se você estiver executando o IIS7 + e isso não estiver funcionando.
precisa saber é o seguinte
É possível restringir isso a um controlador?
Guillermo Varini
@ Eddie eu tenho dois arquivos web.config eu usei em ambos, mas não funciona. como eu posso fazer isso ?
Ahmad
2
Isso também é possível em um caminho específico. <location path = "Api / Controller"> <system.web> <autorização> <allow users = "*" /> </authorization> <httpRuntime maxRequestLength = "102400" /> </system.web> </location> (tag de autorização não necessária)
nios 29/08/18
181

Para o IIS 7+, além de adicionar a configuração httpRuntime maxRequestLength, você também precisa adicionar:

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

Ou no IIS (7):

  • Selecione o site que você deseja ativar para aceitar uploads de arquivos grandes.
  • Na janela principal, clique duas vezes em "Solicitar filtragem"
  • Selecione "Editar configurações de recursos"
  • Modifique o "Comprimento máximo permitido do conteúdo (bytes)"
4imble
fonte
Esqueci-me dos kilobytes: p
Andrew Myhre 31/01
10
você provavelmente precisará definir tanto maxRequestLength e maxAllowedContentLengthpara obtê-lo para o trabalho ... ver stackoverflow.com/questions/6327452/...
MikeM
7
@AndrewMyhre maxAllowedContentLength está em bytes, não em KB. Os documentos da Microsoft dizem que o padrão é 30 MB.
Dan Randolph
1
@DanRandolph, na verdade, o padrão é 30000000 (aproximadamente 28,6MB), conforme documentado em iis.net/configreference/system.webserver/security/…
aaaantoine
Você definitivamente precisa das duas configurações.
mohrtan
74

Para aumentar o limite de tamanho do arquivo enviado, temos duas maneiras

1. IIS6 ou inferior

Por padrão, no ASP.Net, o tamanho máximo de um arquivo a ser carregado no servidor é de cerca de 4 MB . Este valor pode ser aumentado modificando o atributo maxRequestLength no web.config .

Lembre-se: maxRequestLenght está em KB

Exemplo : se você deseja restringir os envios para 15 MB, configure maxRequestLength como "15360" (15 x 1024).

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

2. IIS7 ou superior

O ISIS7 introduziu o módulo de filtragem de solicitações . O que é executado antes do ASP.Net. Significa como o pipeline funciona é que o valor do IIS ( maxAllowedContentLength ) foi verificado primeiro e depois o valor do ASP.NET ( maxRequestLength ) foi verificado. O atributo maxAllowedContentLength assume como padrão 28,61 MB . Esse valor pode ser aumentado modificando os dois atributos no mesmo web.config .

Lembre-se: maxAllowedContentLength está em bytes

Exemplo : se você deseja restringir os envios para 15 MB, configure maxRequestLength como "15360" e maxAllowedContentLength como "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 de referência do MSDN : https://msdn.microsoft.com/en-us/library/e1f13641(VS.80).aspx

Malik Khalil
fonte
17

Acredito que esta linha no web.config definirá o tamanho máximo de upload:

<system.web>

        <httpRuntime maxRequestLength="600000"/>
</system.web>
ben
fonte
Depois de passar metade do dia, foi isso que me ajudou !!! Muito obrigado !!!
Sagar Khatri
13

para um limite máximo de 2 GB, no seu aplicativo 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>
cangosta
fonte
7

Se o Windows 2003 / IIS 6.0, consulte AspMaxRequestEntityAllowed = "204800" no arquivo metabase.xml localizado na pasta C: \ windows \ system32 \ inetsrv \

O valor padrão de "204800" (~ 205Kb) é, na minha opinião, muito baixo para a maioria dos usuários. Apenas altere o valor para o que você acha que deve ser o máximo.

Se você não conseguir salvar o arquivo após a edição, precisará interromper o servidor ISS ou habilitar o servidor para permitir a edição do arquivo:

texto alternativo
(fonte: itmaskinen.se )

Edit: Eu não li a pergunta correta (como definir o maxrequest no webconfig). Mas essas informações podem ser interessantes para outras pessoas, muitas pessoas que mudam seus sites do servidor win2000 para o win2003 e tiveram uma função de upload funcionando e subitamente obtiveram o erro Request.BinaryRead Failed . Então deixo a resposta aqui.

Stefan
fonte
5

Eu tenho o mesmo problema em um servidor IIS win 2008, resolvi o problema de adicionar essa configuração no web.config:

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

O requestLengthDiskThreshold, por padrão, é de 80000 bytes, portanto é muito pequeno para o meu aplicativo. requestLengthDiskThreshold é medido em bytes e maxRequestLength é expresso em Kbytes.

O problema está presente se o aplicativo estiver usando um System.Web.UI.HtmlControls.HtmlInputFilecomponente do servidor. Aumentar o requestLengthDiskThreshold é necessário para resolvê-lo.

Massimo Zerbini
fonte
1
De acordo com msdn.microsoft.com/en-us/library/e1f13641(v=vs.100).aspx "Especifica o limite para o limite de buffer do fluxo de entrada, em kilobytes. Esse valor não deve exceder o atributo maxRequestLength." portanto, deve ter no máximo o mesmo tamanho da solicitação?
Jeff Jeff
Sim @Jeff, o valor de requestLengthDiskThreshold deve ser menor que maxRequestLength, mas o primeiro é expresso em bytes. Se requestLengthDiskThreshold for maior que maxRequestLength, uma ConfigurationErrorsException deve ser lançada, para que você possa testar o valor correto por conta própria. Veja forums.asp.net/t/…
Massimo Zerbini
4

Se você estiver usando o Framework 4.6

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

O tamanho máximo do arquivo pode ser restrito a um único MVC Controller ou até a uma ação.
A tag web.config <location> pode ser usada para isso:

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

Ou você pode adicionar essas entradas no próprio web.config da área.

Martin
fonte
Isso deve ser mais alto e usado em vez da resposta aceita, pois é mais seguro para validar o tamanho da solicitação.
Jonathan Ortega
4

Eu sei que é uma pergunta antiga.

Então é isso que você precisa fazer:

No seu arquivo web.config, adicione isto em <system.web>:

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

e isso em <system.webServer>:

<security>
    <requestFiltering>

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

    </requestFiltering>
</security>

Você vê no comentário como isso funciona. Em um, você precisa ter a sie em bytes e a outra em kilobytes. Espero que ajude.

damir
fonte
2

Você pode escrever esse bloco de código no arquivo web.config do aplicativo.

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

Ao escrever esse código, você pode enviar um arquivo maior do que agora

user3683243
fonte
0

Se você usar o sharepoint, também deverá configurar o tamanho máximo com as Ferramentas Administrativas: kb925083

Questionário
fonte
0

Eu tenho uma postagem no blog sobre como aumentar o tamanho do arquivo para o controle de upload do asp .

Da postagem:

Por padrão, o controle FileUpload permite o upload de um máximo de 4 MB e o tempo limite de execução é de 110 segundos. Essas propriedades podem ser alteradas na seção httpRuntime do arquivo web.config. A propriedade maxRequestLength determina o tamanho máximo do arquivo que pode ser carregado. A propriedade ExecutionTimeout determina o tempo máximo para execução.

sk1900
fonte
0

Se funcionar na sua máquina local e não funcionar após a implantação no IIS (usei o Windows Server 2008 R2), tenho uma solução.

Abra o IIS (inetmgr) Vá para o seu site No lado direito, vá para Conteúdo (Filtragem de solicitações). Vá para Editar configurações de recursos. Você também pode obter ajuda no seguinte link http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits

Rahat Ali
fonte
0

Se você usa ssl cert, suas configurações F5 do pipeline ssl são configuradas.

tayfun Kılıç
fonte