2009-07-20 53 views
3

我想使用HttpPostedFile類從網頁上傳一個或多個大型文件到ASP.NET MVC控制器。使用此類,上傳的大於256 KB的文件將緩存到磁盤,而不是保存在服務器內存中。有沒有辦法使用HttpPostedFile類獲取上傳進度?

我的理解是,它可以這樣做:

if (context.Request.Files.Count > 0) 
{ 
    string tempFile = context.Request.PhysicalApplicationPath; 
    for(int i = 0; i < context.Request.Files.Count; i++) 
    { 
     HttpPostedFile uploadFile = context.Request.Files[i]; 
     if (uploadFile.ContentLength > 0) 
     { 
      uploadFile.SaveAs(string.Format("{0}{1}{2}", 
       tempFile,"Upload\\", uploadFile.FileName)); 
     } 
    } 
} 

有沒有辦法定期設置回調,或使用其他一些方法,返回狀態通過AJAX或JSON的網頁,使進度條和完成百分比可以顯示?代碼是什麼樣的?

回答

4

沒有。只要您使用HttpRequest.InputStream,Asp.net就會始終加載整個請求內容。

如果您想提供這樣的反饋,您需要在客戶端使用類似flash的方式執行此操作,或者編寫自己的http hanlder,直接使用HttpWorkerRequest方法自行加載實體主體。

+0

謝謝我也有這個問題,[見我的問題](http://stackoverflow.com/q/11779751/340045),你知道任何好的教程編寫自己的http處理程序? – Ben 2012-08-04 11:51:19

0

我傾向於同意serialseb。您需要編寫自己的http處理程序,它可能會將某些事件的上傳進度輸出到某個事件中,這些事件可能會用於查詢此類進度的特定操作,並允許客戶機定期查詢更新。

相關問題