1. 程式人生 > >atitit.文件上傳帶進度條的實現原理and組件選型and最佳實踐總結O7

atitit.文件上傳帶進度條的實現原理and組件選型and最佳實踐總結O7

private tps cto 協議 post sch 頁面 system osc

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!

隨著容量的增大。FileUploadSmartUpload的性能下降很快。直到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