mirror of
https://gitee.com/myxzgzs/boyuehasfj-vue3.git
synced 2025-08-08 07:02:42 +08:00
2 lines
7.7 KiB
JavaScript
2 lines
7.7 KiB
JavaScript
![]() |
var e=(e,a,l)=>new Promise(((t,s)=>{var u=e=>{try{o(l.next(e))}catch(a){s(a)}},n=e=>{try{o(l.throw(e))}catch(a){s(a)}},o=e=>e.done?t(e.value):Promise.resolve(e.value).then(u,n);o((l=l.apply(e,a)).next())}));import{Z as a,a2 as l,_ as t,z as s,r as u,O as n,a3 as o,D as i,j as d,h as r,o as c,w as m,e as p,c as f,I as v,J as h,f as g,m as b,B as y,i as _,a4 as N}from"./index-C-c3zR6K.js";function k(e){return a({url:"/file/info/list",method:"get",params:e})}function w(e){return a({url:"/file/info/"+e,method:"delete"})}function z({storageType:e,clientName:t,filePath:s}){return a({url:`/file/${e}/${t}/download`,method:"get",params:{filePath:s},responseType:"blob",headers:{Authorization:"Bearer "+l()}})}function C(){return a({url:"/file/client-list",method:"get"})}function x(e,l,t,s){const u=new FormData;return u.append("chunk",s),a({url:"/file/uploadChunk",method:"post",params:{uploadId:e,filePath:l,chunkIndex:t},data:u,headers:{"Content-Type":"multipart/form-data",repeatSubmit:!1}})}const V={class:"card-header"},$={class:"file-name"},P={class:"file-details"},T={class:"detail-item"},S={class:"detail-value"},I={class:"detail-item"},M={class:"detail-value"},B={class:"progress-info"},U={class:"progress-text"},j={key:0,class:"el-icon-loading progress-icon"},E={class:"progress-message"},F={class:"progress-text"},O={class:"dialog-footer"},D={key:0,class:"el-icon-upload2"},A={key:1,class:"el-icon-loading"},J=t({__name:"ChunkUpload",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","upload-success"],setup(l,{emit:t}){const k=l,w=t,z=s({get:()=>k.modelValue,set(e){w("update:modelValue",e)}}),J=u(null),Z=n({clientName:""}),q=n({fileName:"",fileSize:0,totalChunks:0}),G=u(10),H=u(0),K=u(""),L=n({currentChunk:0,message:""}),Q=u(!1),R=u(""),W=u(""),X=u([]),Y=u([]),ee=u(!1);function ae(){return e(this,null,(function*(){ee.value=!0;try{const e=yield C();200===e.code&&e.data&&(Y.value=Object.entries(e.data).flatMap((([e,a])=>a.map((a=>({value:e,label:`${e} - ${a}`,clientName:a}))))),Y.value.length>0&&(Z.clientName=Y.value[0].value))}catch(e){}finally{ee.value=!1}}))}function le(e){return J.value=e,q.fileName=e.name,q.fileSize=(e.size/1048576).toFixed(2),te(),!1}function te(){if(!J.value)return;const e=J.value.size,a=1024*G.value*1024;q.totalChunks=Math.ceil(e/a)}function se(){return e(this,null,(function*(){var e;if(J.value)if(Z.clientName)try{Q.value=!0,K.value="",L.message="开始初始化上传...",X.value=[];const t=1024*G.value*1024,s=[];let u=0;for(;u<J.value.size;)s.push(J.value.slice(u,u+t)),u+=t;const n=s.length;let o=0;const{data:i}=yield(e={fileName:J.value.name,fileSize:J.value.size,fileType:J.value.name.split(".").pop(),clientName:Z.clientName,bucketName:Z.clientName},a({url:"/file/initUpload",method:"post",params:{fileName:e.fileName,fileSize:e.fileSize,fileType:e.fileType,bucketName:e.clientName}}));if(!i||!i.uploadId||!i.filePath)throw new Error("初始化上传失败");R.value=i.uploadId,W.value=i.filePath,L.message="初始化成功,开始上传分片...";for(let e=0;e<s.length;e++){const a=s[e];(new FormData).append("chunk",new File([a],`${J.value.name}_${e}`,{type:J.value.type}));try{const{data:l}=yield x(R.value,W.value,e,a);if(!l||!l.etag)throw new Error("服务器返回的分片信息无效");X.value.push({partNumber:e+1,eTag:l.etag}),o++,H.value=Math.round(o/n*100),L.currentChunk=e,L.message=`已上传 ${H.value}% (分片 ${e+1}/${n})`,yield new Promise((e=>setTimeout(e,100)))}catch(l){throw new Error(`分片 ${e+1} 上传失败: ${l.message}`)}}L.message="正在合并分片...",X.value.sort(((e,a)=>e.partNumber-a.partNumber));const{data:d}=yield function(e){const{uploadId:l,filePath:t,partETags:s}=e;return a({url:"/file/completeUpload",method:"post",params:{uploadId:l,filePath:t},data:s})}({uploadId:R.value,filePath:W.value,partETags:X.value,clientName:Z.clientName});K.value="success",L.message="上传完成",N.success("文件上传成功"),w("upload-success",d),ne()}catch(l){K.value="exception",L.message=`上传失败: ${l.message}`,N.error(`文件上传失败: ${l.message}`)}finally{Q.value=
|