我用 axios 上传文件,想加个进度条,但 onUploadProgress 回调好像没触发,是我写错了吗?
试过这样写:
axios.post('/upload', file, {
onUploadProgress: (progressEvent) => {
console.log('progress:', progressEvent.loaded / progressEvent.total)
}
})
但控制台完全没输出,文件倒是能传上去。是不是要配什么 headers 或者用 FormData 包一下?
第一,你直接传 file 对象不太规范,应该用 FormData 包一下。虽然直接传 file 有时候也能跑,但进度监听可能会出问题,而且后端接收也麻烦。
第二,如果文件太小,上传瞬间就完成了,进度事件根本来不及触发。你试试用个大点的文件,比如几MB的图片或视频。
给你一个正确的写法:
如果改完还是没反应,打开浏览器开发者工具的 Network 面板,看一下请求的 Content-Type 是不是 multipart/form-data,顺便确认一下请求耗时。要是耗时只有几毫秒,那说明文件太小瞬间传完了,换个大于 1MB 的文件测试应该就能看到进度了。
还有个坑,如果你本地开发用了代理或者 mock 数据,进度事件也可能被吞掉,直接用真实后端接口测试更靠谱。