request封装的axios如何大文件切片上传并获取上传进度及网速
时间: 2023-06-02 12:05:18 浏览: 180
对于大文件切片上传,可以使用axios的FormData来实现。具体步骤为:
1. 读取待上传的文件,将其切分成多个片段;
2. 将每个片段使用FormData对象进行封装,并携带文件名、文件大小、当前片段数、总片段数等信息,然后使用axios进行上传;
3. 上传过程中,利用axios的onUploadProgress回调函数来获取上传进度和上传速度等信息,并将其保存到状态中以供后续使用。
以下是一个示例代码:
```
const chunkSize = 1024 * 1024; // 每个片段的大小,这里设置为1MB
const chunks = Math.ceil(file.size / chunkSize); // 计算总片段数
for (let i = 0; i < chunks; i++) {
const start = i * chunkSize;
const end = Math.min(start + chunkSize, file.size);
const fd = new FormData();
fd.append('file', file.slice(start, end));
fd.append('name', file.name);
fd.append('size', file.size);
fd.append('index', i);
fd.append('chunks', chunks);
axios.post('/upload', fd, {
onUploadProgress: progressEvent => {
const uploaded = start + progressEvent.loaded;
const speed = progressEvent.loaded / ((Date.now() - startTime) / 1000);
const percent = uploaded / file.size;
// 更新上传进度和上传速度
updateProgress(uploaded, percent, speed);
}
});
}
```
其中,updateProgress是一个自定义的函数,用于更新上传进度和上传速度等状态。
阅读全文