fast-file-upload
Version:
大文件分片+webWorker快速上传组件
2 lines (1 loc) • 1.24 kB
JavaScript
;var u=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var I=(t,e)=>{for(var n in e)u(t,n,{get:e[n],enumerable:!0})},g=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of k(e))!C.call(t,o)&&o!==n&&u(t,o,{get:()=>e[o],enumerable:!(r=y(e,o))||r.enumerable});return t};var w=t=>g(u({},"__esModule",{value:!0}),t);var F={};I(F,{fastFileUpload:()=>x});module.exports=w(F);var h=navigator.hardwareConcurrency||4,d=(t,e=5*1024*1024)=>new Promise(n=>{let r=[],o=0,a=Math.ceil(t.size/e),c=Math.ceil(a/h);for(let i=0;i<h;i++){let l=new Worker("./dist/work.js",{type:"module"}),s=i*c,f=s+c;f>a&&(f=a),l.postMessage({file:t,i,CHUNK_SIZE:e,startIndex:s,endIndex:f}),l.onmessage=({data:p})=>{for(let m=s;m<f;m++)r[m]=p[m-s];l.terminate(),o++,o===h&&n(r)}}});var x=(t,e)=>{let n=document.querySelector(t),{perCallback:r,lastCallback:o,chunkSize:a}=e||{};n.onchange=async()=>{let c=n.files?Array.from(n.files):[],i=[],l=c.length;for(let s of c)d(s,a).then(f=>{l--;let p={name:s.name,type:s.type,size:s.size,lastModified:s.lastModified,chunks:f};r&&r({...p,isDone:l===0}),i.push(p),l===0&&o&&o(i)})}};0&&(module.exports={fastFileUpload});