日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java 断点续传组件_chunkupload 文件上传断点续传组件(java) - 正式发布

發(fā)布時(shí)間:2024/8/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 断点续传组件_chunkupload 文件上传断点续传组件(java) - 正式发布 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

chunkupload簡(jiǎn)介

chunkupload是一款基于java語(yǔ)言的斷點(diǎn)續(xù)傳組件,針對(duì)文件上傳,非文件下載,集成方便,使用簡(jiǎn)單。

chunkupload實(shí)現(xiàn)如下功能:

·? 實(shí)現(xiàn)斷點(diǎn)續(xù)傳

·? 對(duì)于同一個(gè)文件,允許多用戶同時(shí)上傳,并且上傳的用戶越多,上傳越快

·? 線程安全

·? 同一物理機(jī)下進(jìn)程安全

·? 文件自動(dòng)切片,支持合并

·? 內(nèi)存占用小

·? 高效穩(wěn)定,高可用

·? 易集成,無(wú)第三方依賴

chunkupload只關(guān)注文件上傳,并沒有安全機(jī)制,開發(fā)者需要自行設(shè)計(jì)安全控制策略,防范用戶上傳非法文件,chunkupload默認(rèn)上傳的文件是安全的。

chunkupload功能完備,服務(wù)端和客戶端無(wú)縫銜接,開發(fā)者只需關(guān)注自身業(yè)務(wù)和UI展現(xiàn)即可。

為了盡可能提升用戶體驗(yàn),chunkupload在客戶端的技術(shù)選型有些激進(jìn),采用了許多先進(jìn)的技術(shù),比如:web worker、XMLHttpRequest數(shù)據(jù)傳送進(jìn)度、FileReader、file slice等,所以對(duì)瀏覽器兼容性會(huì)有一定影響,在確定使用chunkupload前請(qǐng)務(wù)必仔細(xì)斟酌!

chunkupload集成

服務(wù)端

chunkupload服務(wù)端運(yùn)行需要JRE7或更高版本,無(wú)任何第三方依賴。

1.引用chunkupload.1.0.jar。

2.在項(xiàng)目web.xml中配置chunkupload servlet。

1

2 ChunkUpload

3 com.iyangyuan.chunkupload.servlet.DispatcherServlet

4

5

6 ChunkUpload

7 /chunkupload/*

8

強(qiáng)烈建議將chunkupload servlet配置在安全框架之后(比如shiro),mvc框架之前(如springmvc)。

chunkupload servlet中的攔截路徑(url-pattern),如果無(wú)特殊需求,無(wú)需更改,假如一定要更改,還需要同步更改客戶端的配置。

客戶端

chunkupload客戶端對(duì)瀏覽器的要求比較高,目前已知chrome、firefox瀏覽器完整支持,360瀏覽器如果啟用webkit內(nèi)核,應(yīng)該也沒有問題,IE瀏覽器絕對(duì)不支持(想都不要想),其他瀏覽器未知。

開發(fā)者可能會(huì)問,為什么兼容性如此捉襟見肘?

chunkupload是新時(shí)代的產(chǎn)物,它代表了時(shí)代的發(fā)展方向,它的價(jià)值在于提供最先進(jìn)的技術(shù)示范,而不是沉重的歷史包袱。

chunkupload在客戶端的實(shí)現(xiàn),無(wú)任何第三方依賴,只關(guān)注與服務(wù)端的邏輯交互,并不干預(yù)UI展現(xiàn),為開發(fā)者創(chuàng)造最大的發(fā)揮空間。

1.引用dawn.1.0.js,用于在客戶端計(jì)算文件MD5,dawn.js是chunkupload的一個(gè)附屬項(xiàng)目,相比未經(jīng)優(yōu)化的javascript計(jì)算MD5方法,dawn.js將計(jì)算效率提升50%左右。

2.引用chunkupload.1.0.js,此乃chunkupload客戶端核心庫(kù),封裝了所有上傳所需的邏輯。

chunkupload使用

服務(wù)端

服務(wù)端需要?jiǎng)?chuàng)建chunkupload.properties配置文件,放置在項(xiàng)目classpath根目錄下,也就是大家熟悉的log4j.properties所在目錄,配置文件中有如下選項(xiàng):

·??root 文件存儲(chǔ)路徑,相當(dāng)于根目錄,內(nèi)部還會(huì)有chunkupload創(chuàng)建的目錄結(jié)構(gòu);假如同一臺(tái)物理機(jī)配置多個(gè)文件上傳容器,此項(xiàng)配置應(yīng)該設(shè)置成統(tǒng)一目錄,默認(rèn)為[/data]。

·??fileLockCapacity文件鎖緩存容量,一般設(shè)置為2048即可,開發(fā)者可根據(jù)服務(wù)器性能自行調(diào)整,默認(rèn)為2048。

·??createFile 文件上傳完成后,是否立即合并切片,生成完整文件;強(qiáng)烈建議此配置項(xiàng)設(shè)置為false,一般情況下,切片無(wú)需合并,就算合并,也不需要立即合并;如果設(shè)為true,立即合并文件會(huì)占用大量服務(wù)器資源,并且會(huì)造成客戶端長(zhǎng)時(shí)間等待;合并的速度大約100M/S,視服務(wù)器具體性能而定,默認(rèn)為true。

至此,服務(wù)端已經(jīng)可以正常運(yùn)作了。

客戶端

默認(rèn)情況下,客戶端無(wú)需任何配置。

假如開發(fā)者更改過(guò)chunkupload servlet攔截路徑,那么chunkupload.1.0.js中的Block.config.api配置也需要做相應(yīng)的改動(dòng),具體情況需要開發(fā)者自行斟酌。

ChunkUpload 類

文件上傳核心實(shí)現(xiàn)類。

實(shí)例化

上傳組件初始化需要提供目標(biāo)文件。

1 /**2

3 * 實(shí)例化ChunkUpload組件4

5 * file 要上傳的目標(biāo)文件對(duì)象6

7 */

8

9 var cu = new ChunkUpload(file);

upload 方法

upload 方法用來(lái)啟動(dòng)文件上傳,通過(guò)四個(gè)異步回調(diào)完成上傳交互,無(wú)返回值。

1 cu.upload({2 "success": function(block){3 /**4 * 上傳成功回調(diào)5 *6 * block 對(duì)象,塊對(duì)象7 */

8 },9 "error": function(e){10 /**11 * 上傳異常回調(diào)12 *13 * e 字符串,異常信息14 */

15 },16 "md5Progress": function(n){17 /**18 * 計(jì)算文件md5進(jìn)度回調(diào)19 *20 * n 整型,進(jìn)度數(shù)值21 */

22 },23 "uploadProgress": function(n){24 /**25 * 上傳進(jìn)度回調(diào)26 *27 * n 整型,進(jìn)度數(shù)值28 */

29 }30 });

abort方法

abort方法用來(lái)中斷上傳,可以在任意階段任意時(shí)刻中斷,無(wú)返回值。

1 cu.abort();

Block 類

文件控制類。

實(shí)例化

1 /**2

3 * 初始化塊對(duì)象4

5 * md5 文件md5,32位6

7 * size 文件大小,字節(jié)8

9 */

10

11 var block = new Block(md5, size);

info方法

獲取塊(文件)信息,返回javascript對(duì)象。

1 block.info();

返回示例:

1 {2

3 "status": 0, //業(yè)務(wù)狀態(tài),0表示成功

4

5 "data": { //數(shù)據(jù)域

6

7 "chunks": [ //所有切片信息

8

9 {10

11 "md5": "e114c21f7d9f8ad1a8551225c3d085be", //切片md5

12

13 "n": 1 //切片序號(hào)

14

15 },16

17 {18

19 "md5": "48357caa7607a636e858315e1b0216d5",20

21 "n": 2

22

23 },24

25 {26

27 "md5": "a23c6ab7104d2ce4ae3c1624ea7eab55",28

29 "n": 3

30

31 },32

33 {34

35 "md5": "3eb29f6241d6fbb35cc715fff2b9ab91",36

37 "n": 4

38

39 },40

41 {42

43 "md5": "120ddc96b878a63adcd7835cbac0c95c",44

45 "n": 5

46

47 }48

49 ],50

51 "chunkNum": 5, //切片數(shù)量

52

53 "md5": "f1154ca6fab7f3628927c1268f3570fd", //文件md5

54

55 "state": 1, //文件狀態(tài),1為上傳完成

56

57 "size": 20879935 //文件長(zhǎng)度

58

59 }60

61 }

delete方法

刪除塊(文件) ,無(wú)返回值。

1 block.delete();

chunkupload服務(wù)端存儲(chǔ)珠璣

任何上傳的文件都會(huì)在服務(wù)端進(jìn)行切片處理,每個(gè)切片4M大小。

通過(guò)文件MD5和文件大小,唯一確定一個(gè)文件。

目錄分散策略,基于開發(fā)者自定義的rootpath,文件MD5前6位,每?jī)晌蛔鳛橐患?jí)目錄,最后以文件MD5+文件長(zhǎng)度作為最終目錄,所有文件信息均存儲(chǔ)在此目錄下。

假如文件MD5為[071287fffa974b878732a7a17858be36],長(zhǎng)度為[20879935],開發(fā)者自定義的rootpath為[/data],那么生成的目錄結(jié)構(gòu)為:[/data/07/12/87/071287fffa974b878732a7a17858be3620879935]。

chunkupload存儲(chǔ)的關(guān)于文件的所有信息,均為二進(jìn)制文件,并且文件名稱固定,具體組織如下圖:

chunkupload未來(lái)

展望chunkupload,未來(lái)無(wú)疑是開源的,只不過(guò)現(xiàn)在還不是時(shí)候,因?yàn)樽髡哂X得它還不夠完美。

通過(guò)大家的寶貴意見、建議,作者會(huì)不斷完善、改進(jìn)chunkupload,等到chunkupload成熟時(shí),也就是開源之日!

希望大家多多與我交流~

chunkupload組件下載

你可以下載如下內(nèi)容:

·chunkupload.jar

·chunkupload.js

·dawn.js

·腳手架(集成了chunkupload的空白項(xiàng)目)

附:客戶端使用示例

上傳示例

1

2

3

ChunkUpload 文件上傳示例

4

5

6

7 body{

8 font-family:"Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;

9 }

10 body > div{

11 width:200px;

12 margin:20px auto 0 auto;

13 }

14 body > div.form{

15 text-align:center;

16 }

17 body > div.form > input{

18 margin-top:12px;

19 border:1px dashed #dcdcdc;

20 padding:4px 8px;

21 cursor:pointer;

22 background-color:transparent;

23 color:#686868;

24 font-family:inherit;

25 outline:none;

26 width:100%;

27 box-sizing:border-box;

28 }

29 body > div.form > input.button{

30 font-size:15px;

31 line-height:29px;

32 padding:0 10px;

33 }

34 body > div.form > input:hover{

35 background-color:#f5f5f5;

36 }

37 div.info > div{

38 margin:auto;

39 height:31px;

40 width:88px;

41 background:url('data:image/gif;base64,R0lGODlhWAAfAMMBAAAAAPXcoPDLdfTboP+dzv+z2f+AwP9brfPZoAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFFAAKACwAAAAAWAAfAAAE/xDISau9OOvNd/hgKI5kaZ5oWkqB4L5wLM90bd+4PLB57//A2g7QChqPyNiwmGw6c8undKrj/STULC3qAxQAMKw0IUiYyy6yWf3j5rwGsMsrd5JfdzQelre5bxIFcROCdUBneWx6aHd9UFY1hAaTAJQTRo6LfYl8i0KQMoGCk6Slg0FsnGmdq3uZSpBiAnCmtaWGqK4yiq2eVURzwbS2pBK3hzabezOvLlxyYMPEg5aXWk1uWNLTxaOU10lR2oHckwcHlIWn4Ed/c97ECOfocJWy7EDus/C28udx8HAlaZYP1ItttRAgKEYBGS9NelL10LevnC2BR1RhM3iwAD9uGE5/NBvpg+IcLx5BhvTxiiDBGSYPivJI0xo+JzHfZfjyxNHDGC9/MaFhb0bRmzg5hoqE9EnOpk2XDJhKtarVq1izat3KtSvWDmDDih0LNgIAIfkEBRQACgAsAwAGADEAFgAABJ9QyEmrBMDqzbsFRTZh3pacZQUaogC2qZRQc4oVLLbCaS2XOpyBNdTxYjPf5iYcOp+kmCfqaj6vUClHlFlhr5is9nOpfsGAonGs6lrPUOvR1r3BnYdDEZemskdvWAh5ejs5fyqBV4N5LHKIiXcGCAhORnMmAkoUXpJgkEsFimeYPVsgond+oEtMoq86rJpTIZdBpbIjLBp9spu8W7nCshEAIfkEBRQACgAsAwAFADoAFgAABLdQyEmrAMDqzWXySdhZQJFN2KhS30oWxnmZrtp++IrB2B7XNmAPZogVezKgJidobXbEonSaUjaZE2erOpt6vz+gk5VFSTIlsBdDFTffnRM6qo4Bjkirbl4Hp6VJHTdxaD59BgcHRzx2ei5/dQiJiml3XI5xdGCSiTF0gZhPml8ICIB5oSqQh22pjwWjdaAuOWNjJCWwfZeuWoS5sME9rh4VtxolSMo0vXqWyGHESyOzZ9LHx9LaAhEAIfkEBRQACgAsAgAFAEQAFgAABMtQyEmrvTjrmmT63VYBgGieVIhSQFFO5CpPYWefrfEK7T5fto+g9iMVdKSc75dqOlWZ5NGgoyaXK6HqNvR4vxbjlEoux2ZQcHrL2uXK8DhWdGODo5LSO24GmJlqXSIvemN8Vn5ISVkaaRgxe4dwkXOAGpBGkmQHB1ZHfmeWRYZ8CJydSkiiTJGlpzqGlauDpHEICGRXsrMbrZq5THVPXcJhBbWSu2g0MmLIucona4BSx9YuoaKOzBbbMNi6RtHaRToXoLyO3nfneLw/EQAh+QQFFAAKACwCAAUASwAXAAAE3lDISau9OOtdE/9gKI4aAJDo5qUSUJyTyVJeYgtrfeesa8ACF5C1khSLuEkNZSr8TL4haKdMWpM8o/YDdRp+X6iUg9xer2VR0/ttu2Wh5bFKP5eAPrd+P55W00t2FjAneXtvAG9xGkhzHIRBbIdhiU9QM5gxhZKTb5J9mSAyXZ1tBwdhTolwoZiGkwinqFFPrZmvh7GnP5+haTSinHsICG1ioBdywFo8WRu4pcaZjslqBcKdyGQYv2ZcLtelrCS/3YKia9fql7btgy/HXdofZYHVTD8Xq+78FMjz/TBEAAA7') no-repeat center center;42 padding:2px;

43 box-sizing:border-box;

44 }

45 div.info > div > p{

46 text-align:right;

47 font-size:12px;

48 margin:0;

49 }

50

51

52

53

54

55

56

57

58

總結(jié)

以上是生活随笔為你收集整理的java 断点续传组件_chunkupload 文件上传断点续传组件(java) - 正式发布的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。