松鼠的博客

导航

大文件上传的解决方法

大文件上传的解决方法
一、使用分片上传的方法
在JavaScript中,File对象是Blob对象的子类,而Blob对象包含一个slice方法,我们可以通过这个方法来对二进制文件进行拆分;
可以使用FormData格式进行上传;
服务器端接口接收到数据,可以通过Multiparty库对数据进行处理;
区分flies和fileds,通过fse.move将上传的文件移动到目标路径下;
客户端使用Promise.all方法,当监听到所有切片已上传完,调用merge接口,通过服务器端来对切片进行合并;
使用Stream对切片边读边写
使用Promise.all判断所有切片是否写入完毕
二、进度条使用浏览器XMLHttpRequest的onprogress方法对进度进行监视
// 作为request的入参
const xhr = new XMLHttpRequest()
xhr.upload.onprogress = onprogress

// 回调方法
onProgress: this.createProgressHandler(this.data[index])

// 接收回调,通过 e.loaded 和 e.total 获取进度
createProgressHandler(item){
return(e) => {
item.percentage = parseInt(String((e.loaded / e.total) * 100))
}
}
三、断点续传核心方法:通过xhr的abort方法,主动放弃当前请求
this.requestList.forEach((xhr) => xhr?.abort());

参考文章:http://blog.ncmem.com/wordpress/2023/10/24/%e5%a4%a7%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95/

欢迎入群一起讨论

 

 

posted on 2023-10-24 11:47  Xproer-松鼠  阅读(27)  评论(0编辑  收藏  举报