拜讀ahxu兄關於上傳檔案顯示進度的文章,理解了其原理,由於ahxu兄那個不開源,所以為了以後擴充,只好自己寫了,否則我是不會重新發明輪子的。
首先,去apache的官網下了個最新的commons-fileupload-1.1.1.jar及其源碼,看了一下,發現與原來的版本有些出入,仔細看了看commons-fileupload-1.1.1的原始碼,理解了其整個過程,在inputStream那做下手腳,就可以取到進度了,這裡,要感謝ahxu兄的貢獻。
ok,開始進入正題,新版本中,用的是ServletFileUpload,看了下源碼,寫一個與其相似的類,只是重寫了parseRequest方法,以及附加一些從ahxu兄那摳出來的方法。
在寫代碼的時候,還要用到關於servlet的包servlet-api.jar。
寫完後調試的過程中,老報錯:java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream,後來一查才知道少了commons-io-1.2.jar,加上後,就ok了。
關於擷取及顯示進度部分,用了我原來自己寫的一個ajax的應用架構,從中抽取了部分代碼出來,注意,js檔案只適用於UTF-8編碼的頁面,因為現在我唯寫UTF-8編碼的頁面了,國際化方便。
下面給個出來
下面給出源碼:
處理檔案上傳的
使用的例子
progressUpload.jar中,包含了commons-fileupload-1.1.1.jar,servlet-api.jar,commons-io-1.2.jar,在progressUpload.jar中,還包含一個屬性檔案,裡面是一些預設配置,可根據自己的需要修改。
由於有源碼,怎麼用可以自己看源碼,此外,那個例子中也寫了,在此不再贅述。例子中只取到了FileItem,再將item儲存一下就ok了,範例程式碼:
File upFile = new File(remoteFilePath);
try
{
item.write(upFile);
fileInfo.put("infotip", "上傳成功.");
}
catch (java.lang.Exception e)
{
fileInfo.put("infotip", "上傳失敗.");
}
有什麼新的想法,歡迎大家留言給我,一起把這個東東做好,發展,才是硬道理。