axios 使用 onDownloadProgress 时,progressEvent.total为0,怎么回事呢
时间: 2024-06-07 19:07:01 浏览: 281
通常情况下,当我们使用 Axios 发送请求时,服务器会返回一个响应头,其中包含了响应数据的长度信息。如果服务器没有设置这个响应头,那么 Axios 就无法获取到响应数据的长度,也就无法计算进度条的长度。
所以,如果你在使用 `onDownloadProgress` 时发现 `progressEvent.total` 为 0,很有可能是服务器没有正确设置响应头导致的。你可以尝试检查一下服务器是否设置了正确的响应头,或者尝试使用其他工具(比如浏览器的开发者工具)来查看响应头信息,看是否有 `Content-Length` 字段。
如果确实是服务器没有设置正确的响应头导致的,你可以考虑使用其他方式来实现进度条,比如定时查询下载进度并更新进度条。
相关问题
axios 用async await 来活去接口的话怎么调用onDownloadProgress这个属性呢
使用 `async/await` 来发送 Axios 请求时,可以通过在 `config` 对象中设置 `onDownloadProgress` 属性来获取下载进度。例如:
```javascript
async function fetchData() {
try {
const response = await axios({
method: 'get',
url: '/data',
responseType: 'blob',
onDownloadProgress: function(progressEvent) {
// 获取下载进度
const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
console.log(percentCompleted);
}
});
// 下载完成后的操作
} catch (error) {
// 错误处理
}
}
```
同样的,获取上传进度的方式也类似,在 `config` 对象中设置 `onUploadProgress` 属性即可。
axios发送请求时过程中,如何模拟出一个进度条
要模拟出一个进度条,你需要使用axios的`onUploadProgress`或`onDownloadProgress`属性。这两个属性可以监听上传或下载的进度,然后你可以根据进度更新进度条的状态。
以下是一个使用`onUploadProgress`属性的示例:
```javascript
// 创建一个axios实例
const axiosInstance = axios.create();
// 监听上传进度
axiosInstance.defaults.onUploadProgress = (progressEvent) => {
// 进度 = 已上传字节数 / 总字节数 * 100
const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
// 更新进度条状态
updateProgress(percentCompleted);
};
// 发送请求
axiosInstance.post('/api/upload', formData);
```
这个示例中,`onUploadProgress`属性监听上传进度。当进度更新时,它会计算出已上传的字节数和总字节数,然后计算出进度百分比。最后,它会调用`updateProgress`函数,将进度百分比传递给它,以更新进度条的状态。
你可以使用类似的方式,使用`onDownloadProgress`属性来监听下载进度。
阅读全文