2012-01-24 33 views
6

Tôi cần tải lên 10Gb tệp lên IIS trong một phần. Theo như tôi biết IIS 7.x/ASP.NET 4.0 không hỗ trợ tải lên trên 2Gb (một số người nói 4Gb).Tải tệp lên trên 2Gb lên IIS 8/ASP.NET 4.5?

Có cố định trong IIS 8/ASP.NET 4.5 không?

+0

Tải lên như thế nào? Với một tệp «input type =» »? – vcsjones

+0

Sử dụng động từ PUT. Sử dụng tải lên nhiều bản POST với 'input type = "file"' cũng OK, Chrome hỗ trợ tải lên trên 2Gb. –

Trả lời

5

Đây là cách tôi tải lên dưới 4GB (Tôi tự hỏi làm cách nào để phá giới hạn này): Hồ bơi ứng dụng .NET 4.0 Chế độ cổ điển (Tại sao không có 4.5?). web.config:

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

Theo bài báo này 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 nói rằng phương pháp từ .NET 4.5 được gọi là không có ngoại lệ. Nhưng liên kết này http://aspnet.uservoice.com/forums/41199-general-asp-net/suggestions/2642879-maximum-upload-size-in-asp-net-is-2gb-increase-it nói: "Đã hoàn thành. Giới hạn này đang được tăng lên 4.5".

Vì vậy, tôi chỉ có một câu hỏi: "LÀM THẾ NÀO?"

+2

Phần tử 'requestLimits' mà bạn đã đề cập ở trên có hiệu quả là mũ IIS ở 4GB. Chúng tôi (ASP.NET) prototyped và xác minh một bản vá sẽ làm cho giới hạn 'maxRequestLength' của chúng tôi là số nguyên 64 bit thay vì số nguyên 32 bit, nhưng do giới hạn IIS được mã hóa, chúng tôi chưa bao giờ kiểm tra bản vá của mình vì nó sẽ không đã được hữu ích khủng khiếp anyway. Quá tải GetBufferlessInputStream bạn gọi là cách duy nhất để có được ASP.NET bỏ qua giới hạn 'maxRequestLength'. Chúng tôi đang thảo luận với nhóm IIS để cố gắng lấy nắp cứng được nâng lên trong một phiên bản tương lai. – Levi

+0

@Levi Không cần phải nâng nắp. Chỉ cần loại bỏ nó. Giới hạn 2Gb/4Gb này làm cho IIS/ASP.NET không sử dụng được trong các dự án của chúng tôi. Khách hàng của chúng tôi cần tải lên 10Gb tệp qua trình duyệt web (có, có thể). –

+0

Mb có thể với môi trường tự lưu trữ không? – smedasn