说这个之前,需要对上一篇文章进行一个回顾文件上传之大文件分块上传-CSDN博客
如果我们要对文件进行一个进度的控制,我们可以在upload接口上进行一些操作。
服务器端:
在上一篇,我们已经获取到totalChunks:也就是分块的总块数
以及 currentChunk:当前块的下标索引
那么我们可以将upload接口原先的
chunkStream.on("end", () => {
    fs.unlinkSync(file.path); //读取文件块的流结束后,删除临时文件
    res.sendStatus(200); //响应上传成功的状态
});
 
替换成:
chunkStream.on("end", () => {
    fs.unlinkSync(file.path); //读取文件块的流结束后,删除临时文件
    const progress = ((currentChunk + 1) / totalChunks) * 100;  //计算出上传进度的百分比
    res.json({ progress }); //相应上传成功的状态
}); 
当我们进行文件上传时,以下则是打印出的progress

服务器端已经修改完毕,那么客户端应该如何去接收和使用呢?
客户端:
首先,在页面上我们要去写一个进度条
<progress
    value="0"
    max="100"
    id="progress"
></progress> 
那么在前端接口哪里进行返回数据的一个操作
try{
    const res = await axios.post('http://localhost:3000/upload',formData,{
        headers:{
            'Content-Type':'multipart/form-data',
        },
    }); //发送当前块的上传请求
    const { progress } = res.data; //获取当前块的上传进度
    document.getElementById('progress').value = progress; //更新进度
}catch(error){
    console.error(error);
    return;
} 
那么以上操作就可以完成进度条的一个操作了。









![P4769 [NOI2018] 冒泡排序 洛谷黑题题解附源码](https://img-blog.csdnimg.cn/img_convert/323dd164e2dd3ad46800446b78d7ada2.png)









