返回

Axios 实现文件上传进度条、文件下载及下载进度监听

前端

如今,文件传输的需求已变得日益普遍。以文件上传为例,人们需要将本地文件上传至服务器。而文件下载则是指将服务器文件下载至本地。为了优化用户体验,服务器与客户端之间常引入进度条机制,实时反馈文件上传或下载的进度。

文件上传进度条:

const onUploadProgress = (progressEvent) => {
  // 计算上传进度
  const percentage = Math.round((progressEvent.loaded * 100) / progressEvent.total);
  
  // 更新进度条UI
  setProgress(percentage);
};

axios.post('/upload', data, {
  onUploadProgress,
})
.then((response) => {
  // 上传成功
})
.catch((error) => {
  // 上传失败
});

文件下载进度条:

const onDownloadProgress = (progressEvent) => {
  // 计算下载进度
  const percentage = Math.round((progressEvent.loaded * 100) / progressEvent.total);
  
  // 更新进度条UI
  setProgress(percentage);
};

axios({
  url: '/download',
  method: 'GET',
  responseType: 'blob', // 确保以二进制流方式下载文件
  onDownloadProgress,
})
.then((response) => {
  // 下载成功
  const blob = response.data;
  // 利用blob构建文件链接
  const url = window.URL.createObjectURL(blob);
  
  // 创建一个<a>标签,并将href属性设置为下载文件的链接
  const link = document.createElement('a');
  link.href = url;
  link.download = 'filename.ext';
  
  // 将<a>标签添加到文档中
  document.body.appendChild(link);
  
  // 点击该<a>标签,开始下载文件
  link.click();
})
.catch((error) => {
  // 下载失败
});

文件上传或下载进度条是常见的用户界面元素,它有助于用户实时了解文件传输的进展情况。凭借其简洁的接口,Axios使这一切变得非常容易。

无论你是初出茅庐的菜鸟,还是久经沙场的老手,Axios都可以成为你开发的可靠伴侣。它的广泛应用场景和丰富的功能特性,足以满足你对网络请求的各类需求。

我希望这篇文章能帮助你实现Axios的文件上传和下载功能。如果您还有其他问题,请随时提出。