標籤:資料 記錄 mon 提升 社區 等等 指南 void slist
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. 新的bp1. 效能提升---切割小檔案上傳,避免一次使用記憶體使用量過大的
能夠配置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+flash6. 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