原生js实现大文件切片上传
const handle = () => {
let max = 1024 * 100;
let count = Math.ceil(file.size / max);
let index = 0;
let chunks = [];
if (count > 100) {
max = file.size / 100;
count = 100;
}
while (index < count) {
chunks.push({
file: file.slice(index * max, (index + 1) * max),
filename: `${HASH}_${index + 1}.${suffix}`,
});
index++;
}
index = 0;
const finalled = () => {
index ++;
if(index < count) return;
}
chunks.forEach(chunk => {
if(already.length > 0 && already.includes(chunk.filename)){
finalled();
return;
}
let fm = new FormData();
fm.append('file', chunk.file);
fm.append('filename', chunk.filename);
instance.post('/upload_chunk', fm).then(data => {
if(data.code === 0){
finalled();
return;
}
return Promise.reject(data.codeText);
}).catch(() => {
})
})
};