axios下载进度api无法获取响应大小 BUG
axios 提供了监听上传/下载进度的事件: axios - Request Config
javascript
// `onUploadProgress` allows handling of progress events for uploads
// browser only
onUploadProgress: function (progressEvent) {
// Do whatever you want with the native progress event
},
// `onDownloadProgress` allows handling of progress events for downloads
// browser only
onDownloadProgress: function (progressEvent) {
// Do whatever you want with the native progress event
},
可以看到他们的参数类型是相同的(ProgressEvent)
问题分析
参考:
onDownloadProgress has progressEvent.total property with zero value
content-length首部缺失
第一种可能,响应头中的 content-length
缺失,后端没有返回,可在上面的监听方法中打印 progressEvent.srcElement.getResponseHeader('content-length')
验证。
解决方案:让后端补上
gzip
第二种可能,content-length
有返回,但响应经过了gzip编码(content-encoding: gzip
)。在上面的监听方法中打印 progressEvent.loaded
会发现下载完成后,loaded值可能会远大于 content-length
。
解决方案:
- 关闭gzip
- 后端把文件大小存储到其它响应首部字段上,例如:
x-content-length
,axios封装中,使用该值作为total计算进度。
Last updated: