Java文件上傳的一些知識積累

一 文件上傳

服務端: 一般服務端可以使用struts,SpringMVC(web框架都有這樣的支持),struts是基於common-fileupload的,SpringMVC則基於Commons FileUpload和COS FileUpload ,它們一般都可以設置服務端使用的磁盤tmp文件或內存的大小,單個文件大小和類型的限制等。

     本質上,它們都是在Servlet之上對request.getInputSteam()的內容做解析,服務器解析http post數據,僅僅是對http協議的實現,原理簡單。(參考最後部分文件上傳的http協議:http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2 )

客戶端: 可以使用swf或者js,swf有SWFUpload插件,js有Jquery很多插件,最終都是通過http post方式提交文件。單從文件上傳的功能看,服務端不關心客戶端使用的是swf還是js,因爲最終都是http post方式(如果要實現進度條,服務端就需要關心是否要作配合了)。

 


二 進度條
js實現進度條原理: 因爲js無法通過瀏覽器獲取文件傳輸的進度,所以需要服務端配合,服務端將進度(當前長度,總長度)存到session中,提供新接口返回此2個值;而客戶端:使用Jquery的ajax輪詢(comet方式:請求-Blocked(30s內),響應-請求-Blocked(30s內),響應...)進度,並顯示。


swf實現進度條的原理: flash是本地的插件,上傳文件時是flash把流交給瀏覽器,因此它知道文件的進度,它可以在發送過程中將發送的相關狀態數據回傳到js的函數中處理,不需要服務端做特別的配合。

 

 

另外:qq郵箱的附件上傳,默認情況下就是使用swf的方式,可以看到頁面有引進upload.swf文件。qq郵件發送的進度條估計也是使用swf。因爲js實現進度條的方式太耗服務器資源了,一般不這麼做。

 

參考:

http://jakarta.apache.org/commons/fileupload

http://www.servlets.ocm/cos

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章