轉帖|其它|編輯:郝浩|2011-09-23 14:15:55.000|閱讀 1428 次
概述:最近在做asp.net mvc 大文件上傳,但是每次大文件上傳的響應時間都很長,沒有提示就給不了用戶良好的體驗,所以想了想還是必須在文件上傳時顯示進度條,但是asp.net默認的文件上傳管道是無法顯示進度條的。所以就必須自己手動創建一個接收管道。實現的方式有2種,一種是寫一個類繼承IHttpModule接口然后實現其中的方法,還有一種就是直接在Global.asax里面的Application_BeginRequest寫上傳文件的方法。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
最近在做asp.net mvc 大文件上傳,但是每次大文件上傳的響應時間都很長,沒有提示就給不了用戶良好的體驗,所以想了想還是必須在文件上傳時顯示進度條,但是asp.net默認的文件上傳管道是無法顯示進度條的。所以就必須自己手動創建一個接收管道。實現的方式有2種,一種是寫一個類繼承IHttpModule接口然后實現其中的方法,還有一種就是直接在Global.asax里面的Application_BeginRequest寫上傳文件的方法。
在寫文件接收方法的時候應該分塊來接收文件,然后在同時保存文件的狀態,這時候就要注意如何保存文件的狀態,以便客戶端獲取,我想了幾種方式總結出來
1、可以使用Application變量。Application對象的作用范圍是整個全局,也就是說對所有用戶都有效。其常用的方法用Lock和UnLock。
view sourceprint?
1 Application.Lock();
2
3 Application["GUID"]=upload;
4
5 Application.UnLock();
2、使用Session變量。想必這個肯定是大家使用中最常見的用法了,其操作與Application類似,作用于用戶個人,所以,過量的存儲會導致服務器內存資源的耗盡。
view sourceprint?
1 Session["GUID"]=upload;
3、使用Cookie變量。這個也是大家常使用的方法,與Session一樣,其實是對每一個用戶而言的,但是他們有個本質的區別,即Cookie 是存放在客戶端的,而Session是存放在服務器端的。而且Cookie的使用要配合ASP.NET內置對象Request來調用。
view sourceprint?
1 HttpCookie myCookie = new HttpCookie(cookieName);
2 myCookie = HttpContext.Current.Request.Cookies[cookieName];
3 HttpContext.Current.Response.Cookies.Add(myCookie);
4 HttpCookie myCookie = new HttpCookie(cookieName);
5 myCookie = HttpContext.Current.Request.Cookies[cookieName];
4、使用Cache,但是.NET中Cache有兩種調用方式:HttpContext.Current.Cache 和 HttpRuntime.Cache。下面的是MSDN的解釋。
HttpContext.Current.Cache:為當前 HTTP 請求獲取Cache對象。
HttpRuntime.Cache:獲取當前應用程序的Cache。
HttpContext:封裝有關個別HTTP請求的所有HTTP特定的信息,HttpContext.Current為當前的HTTP請求獲取HttpContext對象。
HttpRuntime:為當前應用程序提供一組ASP.NET運行時服務。
其實HttpRuntime.Cache相當于就是一個緩存具體實現類,這個類雖然被放在了System.Web命名空間下,但是非Web應用下也是可以使用;HttpContext.Current.Cache是對上述緩存類的封裝,由于封裝到了HttpContext類中,局限于只能在知道 HttpContext下使用,即只能用于Web應用。
既然我們這邊是采用mvc3是web應用程序,那我們就都可以使用,但是我建議既然是web應用程序還是使用HttpContext.Current.Cache.
view sourceprint?
1 HttpContext.Current.Cache[Guid]
以上4種都可以算是全局變量,但是有的并不是很好的方案,建議使用第一種和第四種來存儲數據。我是采用Cache來存儲文件進度的信息的。
這時候又有一個問題了。我們應該怎么知道當前上傳的是什么應用程序呢?我使用的是GUID來標識,這樣上傳上來的程序就有唯一的標識符了。多個用戶同時上傳也不會有問題了。
在客戶端方面我采用了Jquery 版本號 1.64 、 jquery.blockUI.js 版本號 1.23、 jquery.form.js 版本號 2.84 、jquery-ui.js 版本號 1.8.16
用jquery.blockUI來實現彈出層,jquery.form用來提交數據,Jquery 的$.ajax方法來獲取當前文件進度的狀態Json,jquery-ui來實現進度條信息。
下面是MVC3大文件上傳的截圖,這篇文章主要是討論文件上傳實現進度條的思路并沒有提供demo進行下載有什么問題可以留言。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載