¿Cómo aumentar el tamaño máximo de carga de archivos en ASP.NET?

238

Tengo un formulario que exceptúa la carga de un archivo en ASP.NET. Necesito aumentar el tamaño máximo de carga por encima de los 4 MB predeterminados.

He encontrado en ciertos lugares haciendo referencia al código siguiente en msdn .

[ConfigurationPropertyAttribute("maxRequestLength", DefaultValue = )]

Ninguna de las referencias describe realmente cómo usarlo, y he intentado varias cosas sin éxito. Solo quiero modificar este atributo para ciertas páginas que solicitan cargar archivos.

¿Es esta la ruta correcta? ¿Y cómo uso esto?

Eddie
fuente
¿Está seguro de que es una limitación de código y no una limitación de host? IIS también tiene un límite.
MrChrister
Estaba bastante seguro de que era una limitación .Net. La respuesta a continuación funcionó para mí.
Eddie

Respuestas:

406

Esta configuración va en su archivo web.config. Sin embargo, afecta a toda la aplicación ... No creo que pueda configurarlo por página.

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

"xxx" está en KB. El valor predeterminado es 4096 (= 4 MB).

Eric Rosenberger
fuente
66
Esto me hizo trabajar para todo el sitio. Lo configuré en 10240 (o 10 MB) por ahora. ¡Gracias!
Eddie
12
Vea mi respuesta si está ejecutando IIS7 + y esto no funciona.
4imble
¿Es posible restringir esto a un controlador?
Guillermo Varini
@ Eddie, tengo dos archivos web.config. Los utilicé en ambos pero no funciona. Cómo puedo hacerlo ?
Ahmad
2
Esto también es posible en una ruta específica. <location path = "Api / Controller"> <system.web> <authorization> <allow users = "*" /> </authorization> <httpRuntime maxRequestLength = "102400" /> </system.web> </location> (no se necesita etiqueta de autorización)
nios
182

Para IIS 7+, además de agregar la configuración httpRuntime maxRequestLength, también debe agregar:

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

O en IIS (7):

  • Seleccione el sitio web que desea habilitar para aceptar cargas de archivos grandes.
  • En la ventana principal, haga doble clic en 'Solicitar filtrado'
  • Seleccione "Editar configuración de funciones"
  • Modifique la "Longitud máxima de contenido permitida (bytes)"
4imble
fuente
Olvidé los kilobytes: p
Andrew Myhre
10
probablemente necesitará configurar ambos maxRequestLength y maxAllowedContentLengthhacer que funcione ... consulte stackoverflow.com/questions/6327452/…
MikeM
77
@AndrewMyhre maxAllowedContentLength está en bytes, no KB. Los documentos de Microsoft dicen que el valor predeterminado es 30 MB.
Dan Randolph
1
@DanRandolph en realidad el valor predeterminado es 30000000 (aproximadamente 28.6MB), como se documenta en iis.net/configreference/system.webserver/security/…
aaaantoine
Definitivamente necesita ambas configuraciones.
mohrtan
74

Para aumentar el límite de tamaño de carga de archivos, tenemos dos formas

1. IIS6 o inferior

De manera predeterminada, en ASP.Net el tamaño máximo de un archivo para cargar en el servidor es de alrededor de 4 MB . Este valor puede aumentarse modificando el atributo maxRequestLength en web.config .

Recuerde: maxRequestLenght está en KB

Ejemplo : si desea restringir las cargas a 15 MB, establezca maxRequestLength en "15360" (15 x 1024).

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

2. IIS7 o superior

Una forma ligeramente diferente utilizada aquí para cargar archivos. IIS7 ha introducido un módulo de filtrado de solicitudes. Lo que se ejecuta antes de ASP.Net. Significa que la tubería funciona es que el valor IIS ( maxAllowedContentLength ) se verifica primero y luego se verifica el valor ASP.NET ( maxRequestLength ). El atributo maxAllowedContentLength tiene un valor predeterminado de 28,61 MB . Este valor puede aumentarse modificando ambos atributos en el mismo web.config .

Recuerde: maxAllowedContentLength está en bytes

Ejemplo : si desea restringir las cargas a 15 MB, establezca maxRequestLength en “15360” y maxAllowedContentLength en "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>

Enlace de referencia de MSDN : https://msdn.microsoft.com/en-us/library/e1f13641(VS.80).aspx

Malik Khalil
fuente
17

Creo que esta línea en web.config establecerá el tamaño máximo de carga:

<system.web>

        <httpRuntime maxRequestLength="600000"/>
</system.web>
ben
fuente
Después de pasar la mitad del día, esto es lo que me ayudó. Muchas gracias !!!
Sagar Khatri
13

para un límite máximo de 2 GB, en su aplicación 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
fuente
7

Si es Windows 2003 / IIS 6.0, consulte AspMaxRequestEntityAllowed = "204800" en el archivo metabase.xml ubicado en la carpeta C: \ windows \ system32 \ inetsrv \

El valor predeterminado de "204800" (~ 205Kb) es, en mi opinión, demasiado bajo para la mayoría de los usuarios. Simplemente cambie el valor a lo que cree que debería ser máximo.

Si no puede guardar el archivo después de editarlo, debe detener el servidor ISS o habilitar el servidor para permitir la edición del archivo:

texto alternativo
(fuente: itmaskinen.se )

Editar: no leí la pregunta correcta (cómo configurar maxrequest en webconfig). Pero esta información puede ser de interés para otras personas, muchas personas que trasladan sus sitios de win2000-server a win2003 y tenían una función de carga funcional y de repente obtuvieron el error Request.BinaryRead Failed lo usarán. Entonces dejo la respuesta aquí.

Stefan
fuente
5

Tengo el mismo problema en un servidor IIS win 2008, he resuelto el problema al agregar esta configuración en web.config:

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

El requestLengthDiskThreshold por defecto es de 80000 bytes, por lo que es demasiado pequeño para mi aplicación. requestLengthDiskThreshold se mide en bytes y maxRequestLength se expresa en Kbytes.

El problema está presente si la aplicación está utilizando un System.Web.UI.HtmlControls.HtmlInputFilecomponente del servidor. Es necesario aumentar el requestLengthDiskThreshold para resolverlo.

Massimo Zerbini
fuente
1
De acuerdo con msdn.microsoft.com/en-us/library/e1f13641(v=vs.100).aspx "Especifica el límite para el umbral de almacenamiento intermedio del flujo de entrada, en kilobytes. Este valor no debe exceder el atributo maxRequestLength". Entonces, ¿debería ser como máximo la longitud de la solicitud?
Jeff
Sí @Jeff, el valor de requestLengthDiskThreshold debería ser menor que maxRequestLength, pero el primero se expresa en bytes. Si requestLengthDiskThreshold es mayor que maxRequestLength, debe lanzarse una ConfigurationErrorsException, para que pueda probar el valor correcto por su cuenta. Ver foros.asp.net/t/…
Massimo Zerbini
4

Si está utilizando Framework 4.6

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

El tamaño máximo de archivo puede restringirse a un solo controlador MVC o incluso a una acción.
La etiqueta web.config <location> puede usarse para esto:

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

O puede agregar estas entradas en la propia web.config del área.

Martín
fuente
Esto debería ser mayor y usarse en lugar de la respuesta aceptada, ya que es más seguro para validar el tamaño de la solicitud.
Jonathan Ortega
4

Sé que es una vieja pregunta.

Entonces esto es lo que tienes que hacer:

En su archivo web.config, agregue esto en <system.web>:

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

y esto debajo <system.webServer>:

<security>
    <requestFiltering>

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

    </requestFiltering>
</security>

Ves en el comentario cómo funciona esto. En uno necesita tener el sie en bytes y en el otro en kilobytes. Espero que ayude.

damir
fuente
2

Puede escribir ese bloque de código en el archivo web.config de su aplicación.

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

Al escribir ese código, puede cargar un archivo más grande que ahora

usuario3683243
fuente
0

Si usa sharepoint, también debe configurar el tamaño máximo con las Herramientas administrativas: kb925083

Examen
fuente
0

Tengo una publicación de blog sobre cómo aumentar el tamaño del archivo para el control de carga asp .

De la publicación:

De forma predeterminada, el control FileUpload permite cargar un máximo de 4 MB y el tiempo de ejecución es de 110 segundos. Estas propiedades se pueden cambiar desde la sección httpRuntime del archivo web.config. La propiedad maxRequestLength determina el tamaño máximo de archivo que se puede cargar. La propiedad executeTimeout determina el tiempo máximo de ejecución.

sk1900
fuente
0

Si funciona en su máquina local y no funciona después de la implementación en IIS (utilicé Windows Server 2008 R2), tengo una solución.

Abra IIS (inetmgr) Vaya a su sitio web En el lado derecho, vaya a Contenido (Solicitud de filtrado) Vaya a Editar configuración de funciones Cambie el tamaño máximo de contenido como (Bytes que necesita) Esto funcionará. También puede obtener ayuda del siguiente hilo http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits

Rahat Ali
fuente
0

Si utiliza el certificado SSL, configure la configuración F5 de la tubería SSL. Es importante.

tayfun Kılıç
fuente