电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Vue.Js及Java實現文件分片上傳代碼實例

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

說明

代碼從項目中剝離修改,未經測試,僅提供思路。

前端

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

文件分片上傳的前端關鍵代碼只有一句:

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

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

mozilla對slice的說明

后端

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

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

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

拓展

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 衬塑管道_衬四氟管道厂家-淄博恒固化工设备有限公司 | 采暖炉_取暖炉_生物质颗粒锅炉_颗粒壁炉_厂家加盟批发_烟台蓝澳采暖设备有限公司 | 山东氧化铁红,山东铁红-淄博科瑞化工有限公司 | 免联考国际MBA_在职MBA报考条件/科目/排名-MBA信息网 | 高压互感器,电流互感器,电压互感器-上海鄂互电气科技有限公司 | 气体检测仪-氢气检测仪-可燃气体传感器-恶臭电子鼻-深国安电子 | 「银杏树」银杏树行情价格_银杏树种植_山东程锦园林 | 佛山市钱丰金属不锈钢蜂窝板定制厂家|不锈钢装饰线条|不锈钢屏风| 电梯装饰板|不锈钢蜂窝板不锈钢工艺板材厂家佛山市钱丰金属制品有限公司 | 圆周直径尺-小孔内视镜-纤维研磨刷-东莞市高腾达精密工具 | 日本东丽膜_反渗透膜_RO膜价格_超滤膜_纳滤膜-北京东丽阳光官网 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | 水厂自动化|污水处理中控系统|水利信息化|智慧水务|智慧农业-山东德艾自动化科技有限公司 | 精益专家 - 设备管理软件|HSE管理系统|设备管理系统|EHS安全管理系统 | 紧急泄压人孔_防爆阻火器_阻火呼吸阀[河北宏泽石化] | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 冷柜风机-冰柜电机-罩极电机-外转子风机-EC直流电机厂家-杭州金久电器有限公司 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 动物解剖台-成蚊接触筒-标本工具箱-负压实验台-北京哲成科技有限公司 | 电子书导航网_电子书之家_电子书大全_最新电子书分享发布平台 | 电动葫芦-河北悍象起重机械有限公司 | 长沙发电机-湖南发电机-柴油发电机供应厂家-长沙明邦智能科技 | 老城街小面官网_正宗重庆小面加盟技术培训_特色面馆加盟|牛肉拉面|招商加盟代理费用多少钱 | 洁净实验室工程-成都手术室净化-无尘车间装修-四川华锐净化公司-洁净室专业厂家 | 不锈钢反应釜,不锈钢反应釜厂家-价格-威海鑫泰化工机械有限公司 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 红酒招商加盟-葡萄酒加盟-进口红酒代理-青岛枞木酒业有限公司 | 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 板式换网器_柱式换网器_自动换网器-郑州海科熔体泵有限公司 | 衬塑设备,衬四氟设备,衬氟设备-淄博鲲鹏防腐设备有限公司 | 直线模组_滚珠丝杆滑台_模组滑台厂家_万里疆科技 | 辐射色度计-字符亮度测试-反射式膜厚仪-苏州瑞格谱光电科技有限公司 | 附着力促进剂-尼龙处理剂-PP处理剂-金属附着力处理剂-东莞市炅盛塑胶科技有限公司 | 北京成考网-北京成人高考网 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 衡阳耐适防护科技有限公司——威仕盾焊接防护用品官网/焊工手套/焊接防护服/皮革防护手套 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 全自动烧卖机厂家_饺子机_烧麦机价格_小笼汤包机_宁波江北阜欣食品机械有限公司 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 呼末二氧化碳|ETCO2模块采样管_气体干燥管_气体过滤器-湖南纳雄医疗器械有限公司 |