分片上传时如何正确显示上传进度条?
我在做文件分片上传,每个分片用 axios 发送,但进度条总是跳变不平滑,不知道该怎么合并各分片的进度来更新整体进度?
试过在每个请求的 onUploadProgress 里累加 progress,但总大小算不准,导致进度条要么卡住要么直接到100%。下面是我用来显示进度条的样式:
.upload-progress {
width: 100%;
height: 8px;
background: #eee;
border-radius: 4px;
overflow: hidden;
}
.upload-progress .bar {
height: 100%;
background: #4caf50;
width: 0%;
transition: width 0.2s ease;
}
有没有人遇到过类似问题?怎么准确计算总进度啊?
直接上代码:
几个关键点:
已上传完成的分片大小要单独记录,每次分片传完就累加。计算进度时用 uploadedSize + 当前分片的 loaded,别直接用 progressEvent 的 percent。然后 axios 的 progressEvent.loaded 是当前请求已传的字节数,不是百分比。
如果想并行上传多个分片,思路也差不多,每个分片独立维护自己的进度,最后汇总:
并行的话进度条跳动会明显一些,因为同时多个在跑,顺序上传最平滑,你自己权衡。