2012-01-24 66 views
6

Necesito cargar archivos de 10 Gb a IIS de una sola pieza. Por lo que sé, IIS 7.x/ASP.NET 4.0 no admite cargas de más de 2 Gb (algunas personas dicen 4 Gb).¿Subir archivos de más de 2 Gb a IIS 8/ASP.NET 4.5?

¿Está fijado en IIS 8/ASP.NET 4.5?

+0

Subir cómo? Con un 'input type =" file "'? – vcsjones

+0

Usando el verbo PUT. El uso de POST carga múltiple con 'input type =' file '' también está bien, Chrome admite la carga de más de 2 Gb. –

Respuesta

5

Así es como cargo debajo de 4GB (me pregunto cómo romper este límite también): El grupo de aplicaciones es .NET 4.0 Modo clásico (¿Por qué no hay 4.5?). web.config:

<httpRuntime executionTimeout="2400" maxRequestLength="2099999999" /> 
... 
<requestLimits maxAllowedContentLength="4294967290"/> 

De acuerdo con este artículo http://msdn.microsoft.com/en-us/library/hh195435%28v=vs.110%29.aspx

public override Stream InputStream 
{ 
    get 
    { 
     object workerRequest = ((IServiceProvider)HttpContext.Current).GetService(typeof(HttpWorkerRequest)); 
     bool webDevServer = workerRequest != null && 
          workerRequest.GetType().FullName == "Microsoft.VisualStudio.WebHost.Request"; 

     if (request.GetType().Assembly.GetName().Version.Major >= 4 && !webDevServer) 
     { 
      try // trying to set disableMaxRequestLength true for .NET 4.5 
      { 
       return (Stream)typeof(HttpRequest).GetMethod("GetBufferlessInputStream", BindingFlags.Public | BindingFlags.Instance, null, new[] { typeof(bool) }, null) 
             .Invoke(request, new object[] { true }); 
      } 
      catch (NullReferenceException) 
      { // .NET 4.0 is not patched by adding method overload 
       Log(DateTime.Now + ": Can not invoke .NET 4.5 method"); 
      } 
      return (Stream) typeof (HttpRequest).GetMethod("GetBufferlessInputStream", 
                  BindingFlags.Public | BindingFlags.Instance, 
                  null, new Type[0], null) 
               .Invoke(request, new object[0]); 
     } 
     return request.InputStream; 
    } 
} 

Log dice que el método de .NET 4.5 se llama sin excepciones. Pero este enlace http://aspnet.uservoice.com/forums/41199-general-asp-net/suggestions/2642879-maximum-upload-size-in-asp-net-is-2gb-increase-it dice: "Completado. Este límite se está incrementando en 4.5".

Así que solo tengo una pregunta: "¿CÓMO?"

+2

El elemento 'requestLimits' que mencionaste anteriormente limita efectivamente IIS a 4 GB. Nosotros (ASP.NET) creamos un prototipo y verificamos un parche que convertiría nuestro límite 'maxRequestLength' en un entero de 64 bits en lugar de un entero de 32 bits, pero debido al límite IIS codificado nunca revisamos nuestro parche puesto que no lo haría han sido terriblemente útiles de todos modos. La sobrecarga de GetBufferlessInputStream que llamó es la única forma de que ASP.NET ignore el límite de 'maxRequestLength'. Estamos en conversaciones con el equipo de IIS para tratar de obtener el límite del código fijo levantado en una versión futura. – Levi

+0

@Levi No hay necesidad de levantar la tapa. Solo elimínalo. Esta limitación de 2Gb/4Gb hace que IIS/ASP.NET inutilizable en nuestros proyectos. Nuestros clientes necesitan cargar archivos de 10 Gb a través del navegador web (sí, es posible). –

+0

Mb ¿es posible con un entorno propio alojado? – smedasn

Cuestiones relacionadas