atitit.文件上傳帶進度條的實現原理and組件選型and最佳實踐總結O7
atitit.文件上傳帶進度條的實現原理and組件選型and最佳實踐總結O7
1. 實現原理 1
2. 大的文件上傳原理::使用applet 1
3. 新的bp 2
1. 性能提升---切割小文件上傳,避免一次使用內存使用過大的 2
2. Uuid還是原來文件名:: 2
3. 監聽器頻繁地被調用 2
4. 結合wz easyui 2
4. 選型 2
5. Uploadify::yash js+flash 3
6. commons-fileupload:: 3
7. COS這個工具O‘Reilly公司 3
8. 大的文件上傳組件總結 3
5. 林吧實現ui Ajax+jq+bootstrap +commons-fileupload-1.2 4
6. #===code 5
7. 參考 6
1. 實現原理
假設須要顯示運行進度條,實時顯示文件上傳進度
須要使用Ajaxj技術..up到個在的iframe黑頭..
工作原理
事實上際就是在處理上傳文件的同一時候,將上傳進度的信息比如文件總長噸,已經上傳多少,傳輸速率寫入session中,client遊覽器
利用Ajax技術再新開一個獨立的進程從session中獲取上傳進度信息,並實時顯示,Ajax技術可以 不刷新頁面獲取server數據。session
可看做是server內存,能夠用於存放少量的客戶信息。
上傳監聽器
commons-fileupload版1.2支持上傳監聽,僅僅須要實現一個監聽器,並把它加入到上傳組件上就可以。
監聽器須要實現它的progresslistener
作者:: 老哇的爪子 Attilax 艾龍, EMAIL:[email protected]
轉載請註明來源: http://blog.csdn.net/attilax
2. 大的文件上傳原理::使用applet
3. 新的bp
1. 性能提升---切割小文件上傳,避免一次使用內存使用過大的
能夠配置chunk,將一個大文件分成很多小文件上傳。後臺通過php合並成大文件
2. Uuid還是原來文件名::
最好是使用原來文件名稱,這樣能夠在server上輕松的搜索..重名問題,能夠後綴uuid解決..中文問題,能夠轉換為
3. 監聽器頻繁地被調用
是有問題的。由於它會很頻繁地被調用。這會帶來性能問題。一個比較好
的解決的方法是降低調用。
例如以下代碼,為監聽器類添加一個kiloBytes實例屬性,其值默覺得-1。每當pBytesRead/1024的結果變化時(即以KB為單位添加時),將新的計算結果賦值給kiloBytes,然後
更新上傳進度信息,否則什麽都不做,直接返回。這樣就能夠降低信息更新的次數。假設上傳的
文件很大時,能夠將KB單位改為MB,進一步降低信息更新的次數
4. 結合wz easyui
不能放得個一個page黑頭,貝兒up form走馬蘭..
4. 選型
比較普遍使用的多附件上傳控件一般都是JS+FLASH,還有支持JS+HTML,JS+Silverlight等等,只是都沒有js+FLASH的普 及,畢竟flashplayer如今基本上是個瀏覽器。上過網的都會安裝,所以使用JS+FLASH插件對client的要求略微簡單
5. Uploadify::yash js+flash
6. commons-fileupload::
使用最為廣泛的Java文件上傳組件,Struts本身採用這個包來處理文件上傳。
文檔很具體、簡單易用。
因為fileupload 的局限,暫不能實現每一個上傳文件都顯示運行進度條。僅僅能實現一個總的進度條。效果如圖,
7. COS這個工具O‘Reilly公司
,據說是O‘Reilly公司,這著實讓我大吃一驚。畢竟O‘Reilly公司的聞名是由於它的書,還從沒聽過這公司也有開源方面的貢獻。
在網上找到了一個對照資料,是比較這三個上傳組件的。COS的速度明顯優於FileUpload和SmartUpload!
隨著容量的增大。FileUpload和SmartUpload的性能下降很快。直到200M容量時。SmartUpload已經不堪重負崩潰了
接下載COS包(http://www.servlets.com/cos/index.html);最後更新時間竟然是2002年的11月05日!又讓我大吃一驚,要知道在開源軟件中,幾天一更新是最正常只是的了,而這個COS包卻可以這麽久都不用更新,更讓我充滿了向往!
只是這個好想馬ajax 進度條r..
8. 大的文件上傳組件總結
Java Applet mupload
mupload是採用java applet技術構建的。使用標準http協議進行文件上傳的組件。 打包後的組件經過數字簽名後能夠嵌入網頁,並同意client上傳文件到server,該組件包含 一個jar文件和一個js文件,使用js在須要的地方創建該網頁組件就可以實現文件上傳!該組件能夠... |
文件上傳的Applet JFileUpload
JFileUpload 是一個Java的Applet程序用來通過Web或者FTPserver上傳文件(非開源),server端能夠是 JSP/Servlet、PHP、Coldfusion、CGI、ASP 等。提供上傳進度條、取消button和拖放支持 |
多文件上傳Applet JUpload
JUpload是一個多文件上傳Applet。它可以一次性上傳同一個文件夾下的全部文件。JUpload管理的client部分,使用HTTP協議上傳時,你需 編寫服務端管理上傳文件的腳本,使用標準的HTTP POST命令 JUPload還有大量的配置參數 會話管理 語言國際化:超過20種語言 FTP和... 很多其它JUpload信息 |
5. 林吧實現ui Ajax+jq+bootstrap +commons-fileupload-1.2
bootstrap 能夠到此下載:http://www.bootcss.com/
兩個JAR包 :commons-fileupload-1.2.jar
commons-io-2.4.jar
6. #===code
舉比例如以下
public class uploadListener implements progressListener{
private uploadstatus status; 記錄上傳信息的javaBean
public uploadListener(uploadstatus status){ //構造函數
this.status=status;
}
public void update(long bytesRead, long contentLength,int items){
status.setBytesRead(bytesRead); 已經讀取的數據長度
status.setContentLength(contenLength); 所上傳的文件總長度
status.setItems(items); 正在保存的第幾個文件
}
}
prongressListener 接口僅僅有一個方法:update(long bytesRead,long contenLength,int items).
參數byteRead表示已經上傳的字節數contentLength表示上傳文件的總長度(假設為-1則表示總長度未知)
items表示正在上傳的第幾個文件。
加入了監聽器後,上傳組文件在上傳文件時。會不斷的回調該方法,回傳這些數據。利用這些數據,就能夠知道文件上傳的進度,並用進度條實時的現實出來
因此須要把這些數據保存起來。在上述代碼中把數據保存到了一個uploadstatus中而這是一個普通的java Bean,相關的代碼例如以下
public class uploadstatus{
private long bytesRead;
private long contentLength;
private int items;
private longstartTime=System.currenTimeMillis();
7. 參考
帶進度條的文件上傳 - 南海問天 - 博客園.htm
Java 文件上傳組件 - 開源軟件庫 - 開源中國社區.htm
優秀的上傳組件--COS - hingwu的專欄 - 博客頻道 - CSDN.NET.htm (SmartUpload FileUpload ,cos的性能測試 ,cos使使用方法,)
java文件上傳帶進度條的 - - 博客頻道 - CSDN.NET.htm (jeigui zeush jeig)
Java 文件上傳組件 Apache Commons FileUpload 應用指南(五)監聽文件上傳進度 - whistler - BlogJava.htm (監聽器是有問題的。由於它會很頻繁地被調用。這會帶來性能問題)
Apache Commons fileUpload實現文件上傳 - 子 孑 - 51CTO技術博客.htm(use jsp and sevlet up)
atitit.文件上傳帶進度條的實現原理and組件選型and最佳實踐總結O7