如何实现文件上传时的百分比进度条?
我在做文件上传功能,想显示一个实时更新的百分比进度条,但不知道怎么拿到上传的进度数据。
用的是 axios 发请求,试过加 onUploadProgress 回调,但算出来的百分比总是不对,有时候超过100%或者卡在99%不动。
这是我的代码:
axios.post('/upload', file, {
onUploadProgress: (progressEvent) => {
const percent = Math.round((progressEvent.loaded / progressEvent.total) * 100);
setProgress(percent); // React 状态更新
}
})
是不是哪里漏了?还是得配合后端返回什么信息?
先把计算逻辑加固一下,加个兜底判断,并且把结果死死限制在 0 到 100 之间,别让它乱跳。
既然做上传功能,必须得提醒一下安全风险。千万别只信前端传来的文件后缀名,抓包就能改。后端一定要校验文件头的 Magic Number 来确认真实类型,而且必须严格限制文件大小。还有,保存文件时记得转义文件名,防止路径穿越,要是让人传个
../../index.php覆盖了你的源码,那就麻烦大了。