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


¿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).


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

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


17

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

<system.web>

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

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>

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


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.


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

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.


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.


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


0

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


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.


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


0

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.