日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Vue.Js及Java實(shí)現(xiàn)文件分片上傳代碼實(shí)例

瀏覽:24日期:2022-08-31 09:53:54

說明

代碼從項(xiàng)目中剝離修改,未經(jīng)測試,僅提供思路。

前端

upload(file) { //從后臺(tái)獲取已經(jīng)上傳的文件分片數(shù) getIdx(md5) .then(function(res) { let retry = 3; uploadPart(retry, file, res.data); }) .catch(); }uploadPart(retry, file, idx) { //設(shè)置分片大小(單位Byte) let bufferLength = 1024 * 1024 * 5; //計(jì)算開始的切割點(diǎn),idx是上傳成功的分片數(shù),未上傳過文件則開始點(diǎn)為0 let start = idx * bufferLength; //全部上傳完畢或重試次數(shù)用完則退出 if(start>=file.size || retry<=0) return; //計(jì)算分割的位置 let end = start + bufferLength; //如果分割點(diǎn)超出文件大小,回退分割點(diǎn) if (end > file.size) {end = fileSize;} //切割文件 var chunk = file.slice(start, end); //創(chuàng)建 formData 對(duì)象并添加數(shù)據(jù) let formData = new FormData(); formData.set('file', chunk); //如果是第一次上傳,連同文件塊數(shù)量也上傳 if (start == 0) { //計(jì)算文件切片總數(shù),向上取整 let chunkNum = Math.ceil(file.size / bufferLength); formData.set('total', chunkNum); } //上傳文件的api,此處使用axios發(fā)送請(qǐng)求 doUpload(formData) //發(fā)送成功,則上傳下一片,遞歸調(diào)用方法 .then(function() { retry = xx;//刷新重試次數(shù) uploadPart(retry, file, ++idx); }) //發(fā)送失敗 .catch(function() { retry--;//重試次數(shù)減一 //重試上傳這一片 uploadPart(retry, file, idx); });},

文件分片上傳的前端關(guān)鍵代碼只有一句:

//切割文件var chunk = file.slice(start, end);

通過slice方法來切割文件,然后文件上傳的流程視業(yè)務(wù)和具體技術(shù)而定,此處是使用axios發(fā)送請(qǐng)求,用遞歸調(diào)用上傳文件塊。需要注意的是,Blob.slice(start, end),文件塊包含start指向的字節(jié),而不包含end指向的字節(jié),在使用時(shí)要注意Blob的邊界。

mozilla對(duì)slice的說明

后端

/**合并文件的實(shí)際操作*/public static void doMergeFiles(String outFile, String[] files) { //設(shè)置緩存大小 int BUFSIZE = 1024 * 1024; //排序。文件后綴名是文件的順序。 Arrays.sort(files); //輸出流 FileChannel outChannel = null; //標(biāo)記最后的一個(gè)文件 String lastFlag = files[files.length-1]; try { outChannel = new FileOutputStream(outFile).getChannel(); //遍歷文件列表 for(String f : files){ //最后一塊文件用真實(shí)大小設(shè)置緩存,避免自動(dòng)填充數(shù)據(jù)造成的md5不一致 if(lastFlag.equals(f)){File last = new File(f);BUFSIZE = (int) last.length();//獲取文件的大小并設(shè)置成緩存的大小 } FileChannel fc = new FileInputStream(f).getChannel(); //用ByteBuffer創(chuàng)建緩存 ByteBuffer bb = ByteBuffer.allocate(BUFSIZE); while(fc.read(bb) != -1){//把數(shù)據(jù)讀到緩存bb.flip();//重置游標(biāo)outChannel.write(bb);//寫入數(shù)據(jù)bb.clear();//清空數(shù)據(jù) } fc.close();//關(guān)閉流 } } catch (IOException ioe) { ioe.printStackTrace(); } finally { try {if (outChannel != null) {outChannel.close();}} catch (IOException ignore) {} }}

  后端的關(guān)鍵是合并文件,當(dāng)上傳完最后一塊文件就進(jìn)行文件的合并。使用ByteBuffer緩存,使用FileChannel進(jìn)行文件的讀寫完成合并操作。在保存文件時(shí),文件名取一致,文件的后綴名則取文件塊的順序,比如第一塊文件是“xxx.01”,第10塊是“xxx.10”,注意,個(gè)位數(shù)前面要補(bǔ)“0”,這樣可以直接用Array.sort()進(jìn)行排序。

  為提高性能,可以適當(dāng)設(shè)置緩存大小,可以邊上傳文件邊合并,不必等到文件都上傳了才合并。

拓展

  此處的文件上傳是一次上傳一片,上傳成功才開始上傳下一片。如果前端不是使用javascript,能開啟使用多線程的話,可以改成同時(shí)上傳多片文件提高上傳速度。已經(jīng)上傳的文件分片用bitmap存儲(chǔ),上傳文件前,從后臺(tái)獲取已上傳的文件分片的bitmap數(shù)據(jù)然后解析,多線程處理未上傳的文件分片。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩av免费大片| 欧美成人精品| 蜜桃av一区二区三区电影| 日本精品黄色| 欧美aa国产视频| 六月丁香综合在线视频| 国产精品美女午夜爽爽| 激情婷婷欧美| 国产综合精品一区| 日韩高清不卡在线| 日韩精品永久网址| 九色精品91| 亚洲一区二区三区无吗| 久久av中文| 日韩中文字幕高清在线观看| 欧美日韩国产亚洲一区| 中文字幕av亚洲精品一部二部 | 亚洲精品人人| 热久久久久久| 成人黄色av| 欧美日韩国产传媒| 国产欧美日韩精品一区二区免费| 高清不卡亚洲| 另类国产ts人妖高潮视频| 日韩黄色免费网站| 毛片在线网站| 国产视频一区二| 久久精品青草| 国产欧美大片| 野花国产精品入口| 国产在线日韩精品| 激情综合网站| 精品国内亚洲2022精品成人| 久久蜜桃精品| 国产精区一区二区| 模特精品在线| 欧美日韩视频网站| 日韩av中文在线观看| 欧美福利专区| 亚洲一区欧美| 在线观看精品| 精品视频免费| 国产亚洲精品美女久久久久久久久久| 波多野结衣久久精品| 日本在线成人| 91久久午夜| 日韩av二区| 国产精品a级| 日韩高清不卡在线| 日韩精品中文字幕一区二区| japanese国产精品| 人人香蕉久久| 国产精品99在线观看| 久久影院资源站| 国产日本久久| 免费成人在线视频观看| 亚洲特级毛片| 精品视频一区二区三区在线观看| 国产精品日本一区二区不卡视频 | 韩国女主播一区二区三区| 亚洲免费福利一区| 免费视频一区二区| 99在线精品视频在线观看| 精品在线99| 999精品色在线播放| 大香伊人久久精品一区二区| 日韩综合精品| 欧美日韩黑人| 欧美日韩一区二区三区视频播放| 亚洲成av人片一区二区密柚 | 亚洲性色av| 精品亚洲成人| 日韩av成人高清| 日韩一区二区三区精品视频第3页| 日韩一区二区免费看| 韩国久久久久久| 三级小说欧洲区亚洲区| 中文日韩在线| 亚洲三级网址| 日韩一区二区免费看| 亚洲人亚洲人色久| 国产精品天堂蜜av在线播放| 久久精品日韩欧美| 久久青青视频| 一区二区不卡| 欧美片第1页| 九色精品91| 日韩精彩视频在线观看| 欧美影院精品| 国产麻豆久久| 日韩精品欧美大片| 国产精品成人一区二区不卡| 欧美一级鲁丝片| 日本不卡一二三区黄网| 精品国产午夜| 午夜av成人| 欧美黄色一区二区| 丝袜亚洲精品中文字幕一区| 91精品国产自产观看在线| 欧美日韩在线二区| 欧美91在线| 亚洲在线电影| 国产精品一国产精品k频道56| 日韩一区亚洲二区| 综合激情五月婷婷| 欧美va亚洲va日韩∨a综合色| 国产精品免费不| 久久久国产亚洲精品| 亚州欧美在线| 青青青免费在线视频| 91精品国产自产观看在线| 久久精品播放| 国产欧美日韩视频在线| 亚洲欧洲国产精品一区| 日韩一区精品字幕| 激情欧美丁香| 国产一区清纯| 你懂的国产精品| 欧美日韩夜夜| 久久激五月天综合精品| 中国女人久久久| 亚洲精品99| 亚洲性视频h| 日韩欧美午夜| 国产成人精品一区二区免费看京| 日韩1区2区日韩1区2区| 中文精品在线| 中文字幕一区二区三区四区久久| 丝袜av一区| 欧美天堂视频| 久久狠狠婷婷| 午夜久久一区| 蜜桃视频在线网站| 精品一区二区男人吃奶| 精品久久久亚洲| 高清久久精品| 99久久婷婷| 激情综合网站| 人人精品久久| 另类欧美日韩国产在线| 欧美精品第一区| 国产成人久久精品麻豆二区| 伊人久久高清| 日本在线成人| 国产麻豆一区二区三区| 欧美精品91| 神马久久午夜| 色爱综合网欧美| 亚洲激情不卡| 日韩欧美三区| 欧美91在线| 久久精品电影| 一级欧美视频| 国产亚洲高清一区| 国产精品美女久久久久久不卡| 国产成人久久精品一区二区三区| 国产亚洲一区二区手机在线观看 | 国产精品亚洲二区| 欧美在线首页| 日韩不卡在线| 97久久亚洲| 美女久久久久| 国产精品成人3p一区二区三区| 国产精品日韩| 国产精品宾馆| 黄色av一区| 日韩二区在线观看| 精品捆绑调教一区二区三区| 亚洲毛片网站| 日韩欧美一区免费| 丝袜美腿亚洲一区| 精品伊人久久| 香蕉久久久久久| 欧美xxxx性| 国产福利亚洲| 蜜桃视频欧美| 九九99久久精品在免费线bt| 午夜视频一区二区在线观看| 日韩av有码| 欧美日一区二区在线观看| 国产不卡一区| 青青国产精品| 国产视频一区三区| 日韩高清中文字幕一区二区| 欧美激情精品| 日韩专区欧美专区| 午夜在线一区二区| 亚洲深爱激情| caoporn视频在线| 亚洲精品一二三**| 午夜欧美精品久久久久久久| 久久一区国产| 日本不卡高清视频| 99国产精品视频免费观看一公开 | 欧美亚洲tv| 久久亚洲国产精品一区二区| 久久久777| 99国产精品免费视频观看| 成人欧美一区二区三区的电影| 欧美日韩中文一区二区|