原生js实现大文件切片上传

原生js实现大文件切片上传

/* 
	实现文件切片处理【固定数量 & 固定大小】
	file原型对象中有silce方法可以实现切片 
	大文件切片上传实现的思路:
		1、调用已经上传切片接口,获取到已上传成功切片
		2、上传切片,将已经上传切片不在进行上传
		3、当所有切片都上传成功了,向后端发送切片合并请求,将上传的切片进行合并
*/
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 => {
        /* 	
		已经上传的无需在上传 		
		already中存在的是:通过请求接口,获取已经上传的文件信息 
		*/
        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(() => {
            // 当上传失败的时候,错误处理
        })
    })
};
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值