mirror of
https://github.com/kuaifan/dootask.git
synced 2026-08-15 01:09:04 +00:00
2 lines
3.2 KiB
JavaScript
Vendored
2 lines
3.2 KiB
JavaScript
Vendored
import{a as k}from"./axios.37c7f908.js";import{S as x}from"./spark-md5.0443325f.js";import{s as D,l as O}from"./app.1e00fc89.js";const j=10*1024*1024,U=3,M=3,C="chunked_upload:",P=new Set(["\u4E0A\u4F20\u4F1A\u8BDD\u4E0D\u5B58\u5728\u6216\u5DF2\u8FC7\u671F","\u4E0A\u4F20\u4F1A\u8BDD\u5F52\u5C5E\u9519\u8BEF","\u5206\u7247\u5E8F\u53F7\u8D85\u51FA\u8303\u56F4","\u5206\u7247\u5927\u5C0F\u4E0D\u7B26\u5408\u9884\u671F","\u672B\u5C3E\u5206\u7247\u5927\u5C0F\u4E0D\u7B26\u5408\u9884\u671F"]);function H(t,e){return t==="hashing"?Math.round(e*.05):t==="uploading"?5+Math.round(e*.9):95+Math.round(e*.05)}async function G({file:t,scene:e,sceneParams:d={},onProgress:a,onStart:i,signal:r}){const n=typeof a=="function"?a:()=>{},o=(s,h)=>n(H(s,h),s);o("hashing",0);const w=await B(t,r,(s,h)=>{o("hashing",Math.min(99,Math.round(s/h*100)))});if(o("hashing",100),r&&r.aborted)throw new Error("aborted");const c=await S("upload/init",{hash:w,size:t.size,name:t.name,scene:e,scene_params:d},r);if(c.ret!==1)throw new Error(c.msg||"\u4E0A\u4F20\u521D\u59CB\u5316\u5931\u8D25");if(c.data&&c.data.done)return o("uploading",100),o("merging",100),c.data;const{upload_id:p,chunk_size:l,chunk_count:g,received:A}=c.data;if(F(w,p,e),typeof i=="function")try{i(p)}catch{}const y=new Set((A||[]).map(Number)),f=[];for(let s=0;s<g;s++)y.has(s)||f.push(s);let E=y.size;const b=()=>{o("uploading",Math.min(99,Math.round(E/g*100)))};b();let N=0,u=null;const z=async()=>{for(;;){if(u)return;if(r&&r.aborted){u=new Error("aborted");return}const s=N++;if(s>=f.length)return;const h=f[s],_=h*l,L=Math.min(_+l,t.size),T=t.slice(_,L);try{await $(p,h,T,r),E++,b()}catch(v){u||(u=v);return}}},I=Math.min(U,f.length||1);if(await Promise.all(Array.from({length:I},()=>z())),u)throw u;o("uploading",100),o("merging",0);const m=await S("upload/merge",{upload_id:p},r);if(m.ret!==1)throw new Error(m.msg||"\u5408\u5E76\u5931\u8D25");return o("merging",100),X(w),m.data}async function $(t,e,d,a){let i;for(let r=0;r<=M;r++){if(a&&a.aborted)throw new Error("aborted");try{const n=new FormData;n.append("upload_id",t),n.append("index",String(e)),n.append("blob",d);const o=await k.post(window.$A.apiUrl("upload/chunk"),n,{headers:R(),signal:a});if(o.data&&o.data.ret===1)return o.data.data;i=new Error(o.data&&o.data.msg||"\u5206\u7247\u4E0A\u4F20\u5931\u8D25")}catch(n){if(a&&a.aborted)throw n;i=n}if(P.has(i.message))throw i;r<M&&await new Promise(n=>setTimeout(n,500*Math.pow(2,r)))}throw i||new Error("\u5206\u7247\u91CD\u8BD5\u8017\u5C3D")}async function S(t,e,d){return(await k.post(window.$A.apiUrl(t),e,{headers:{...R(),"Content-Type":"application/json"},signal:d})).data}function R(){return{token:D.state.userToken,language:O,platform:window.$A.Platform,version:window.systemInfo&&window.systemInfo.version||"0.0.1",fd:window.$A.getSessionStorageString("userWsFd")}}async function B(t,e,d){const a=new x.ArrayBuffer,i=2*1024*1024;for(let r=0;r<t.size;r+=i){if(e&&e.aborted)throw new Error("aborted");const n=Math.min(r+i,t.size),o=await t.slice(r,n).arrayBuffer();a.append(o),d(n,t.size),await new Promise(w=>setTimeout(w,0))}return a.end().toLowerCase()}function F(t,e,d){try{const a={upload_id:e,scene:d,t:Date.now()};localStorage.setItem(C+t,JSON.stringify(a))}catch{}}function X(t){try{localStorage.removeItem(C+t)}catch{}}export{j as C,G as c};
|