程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 用ASP.NET上傳大文件

用ASP.NET上傳大文件

編輯:.NET實例教程

我們在上傳大文件時都遇到過這樣或那樣的問題。設置很大的maxRequestLength值並不能完全解決問題,因為ASP.Net會block直到把整個文件載入內存後,再加以處理。實際上,如果文件很大的話,我們經常會見到Internet Explorer顯示 "The page cannot be displayed - Cannot find server or DNS Error",好像是怎麼也catch不了這個錯誤。為什麼?因為這是個clIEnt side錯誤,server side端的Application_Error是處理不到的,可以參考這個帖子研究一下產生這個錯誤的機理。

handling server error when upload file too large

解決的方法是利用隱含的HttpWorkerRequest,用它的GetPreloadedEntityBody 和 ReadEntityBody方法從IIS為ASP.Net建立的pipe裡分塊讀取數據

  IServiceProvider provider = (IServiceProvider) HttpContext.Current;
  HttpWorkerRequest wr = (HttpWorkerRequest) provider.GetService(typeof(HttpWorkerRequest));
  byte[] bs = wr.GetPreloadedEntityBody();
  ....
  if (!wr.IsEntireEntityBodyIsPreloaded())
  {
        int n = 1024;
        byte[] bs2 = new byte[n];
        while (wr.ReadEntityBody(bs2,n) >0)
       {
             .....
        }
  }

Chris Hynes為我們提供了這樣的一個方案(用HttpModule),該方案除了允許你上傳大文件外,還能實時顯示上傳進度:

ASP.Net Upload Magic Part 2

這裡有他講座的PPT文件:

Uploading with ASP.Net (part 1)

Uploading with ASP.Net (part 2)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved