微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

原生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(() => {
            // 当上传失败的时候,错误处理
        })
    })
};

原文地址:https://www.jb51.cc/wenti/3282766.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐