it编程 > 编程语言 > Javascript

javascript axios 实现进度监控的示例代码

33人参与 2025-02-14 Javascript

在使用 axios 发送 http 请求时,进度监控非常重要,尤其是在上传或下载较大文件时。幸运的是,axios 支持通过 onuploadprogress 和 ondownloadprogress 来监控上传和下载的进度。

1. 监控下载进度

axios 提供了一个 ondownloadprogress 回调函数,可以用来监听下载的进度。该回调会返回一个 progress 对象,包含 loaded(已经下载的字节数)和 total(文件的总字节数)等信息。

const axios = require('axios');

axios.get('https://example.com/large-file.zip', {
  ondownloadprogress: (progressevent) => {
    const percent = math.round((progressevent.loaded * 100) / progressevent.total);
    console.log(`download progress: ${percent}%`);
  }
})
.then(response => {
  console.log('download completed!');
})
.catch(error => {
  console.error('error downloading file:', error);
});

2. 监控上传进度

对于文件上传,也可以使用 onuploadprogress 来监控上传进度。该回调函数类似,也返回一个 progress 对象,包含上传的字节数和文件的总字节数。

const formdata = new formdata();
formdata.append('file', fileinput.files[0]); // 假设文件通过 html 的文件输入获取

axios.post('/upload', formdata, {
  headers: { 'content-type': 'multipart/form-data' },
  onuploadprogress: (progressevent) => {
    const percent = math.round((progressevent.loaded * 100) / progressevent.total);
    console.log(`upload progress: ${percent}%`);
  }
})
.then(response => {
  console.log('upload completed!');
})
.catch(error => {
  console.error('error uploading file:', error);
});

3. 结合上传和下载进度

如果你需要同时监控上传和下载进度,可以在同一个 axios 请求中同时使用 onuploadprogress 和 ondownloadprogress

const formdata = new formdata();
formdata.append('file', fileinput.files[0]);

axios.post('/upload', formdata, {
  headers: { 'content-type': 'multipart/form-data' },
  onuploadprogress: (progressevent) => {
    const percentuploaded = math.round((progressevent.loaded * 100) / progressevent.total);
    console.log(`upload progress: ${percentuploaded}%`);
  },
  ondownloadprogress: (progressevent) => {
    const percentdownloaded = math.round((progressevent.loaded * 100) / progressevent.total);
    console.log(`download progress: ${percentdownloaded}%`);
  }
})
.then(response => {
  console.log('upload and download completed!');
})
.catch(error => {
  console.error('error occurred:', error);
});

4. 显示进度条

结合进度值,你可以使用浏览器的进度条(例如 <progress> 元素)来显示进度。

<progress id="upload-progress" value="0" max="100"></progress>
<progress id="download-progress" value="0" max="100"></progress>
const uploadprogressbar = document.getelementbyid('upload-progress');
const downloadprogressbar = document.getelementbyid('download-progress');

const formdata = new formdata();
formdata.append('file', fileinput.files[0]);

axios.post('/upload', formdata, {
  headers: { 'content-type': 'multipart/form-data' },
  onuploadprogress: (progressevent) => {
    const percentuploaded = math.round((progressevent.loaded * 100) / progressevent.total);
    uploadprogressbar.value = percentuploaded;
  },
  ondownloadprogress: (progressevent) => {
    const percentdownloaded = math.round((progressevent.loaded * 100) / progressevent.total);
    downloadprogressbar.value = percentdownloaded;
  }
})
.then(response => {
  console.log('upload and download completed!');
})
.catch(error => {
  console.error('error occurred:', error);
});

5. 自定义进度显示

你还可以自定义进度条的显示方式,例如使用 console.logalert 或自定义 dom 元素显示进度。

const formdata = new formdata();
formdata.append('file', fileinput.files[0]);

axios.post('/upload', formdata, {
  headers: { 'content-type': 'multipart/form-data' },
  onuploadprogress: (progressevent) => {
    const percent = math.round((progressevent.loaded * 100) / progressevent.total);
    document.getelementbyid('upload-status').innertext = `upload progress: ${percent}%`;
  },
  ondownloadprogress: (progressevent) => {
    const percent = math.round((progressevent.loaded * 100) / progressevent.total);
    document.getelementbyid('download-status').innertext = `download progress: ${percent}%`;
  }
})
.then(response => {
  console.log('upload and download completed!');
})
.catch(error => {
  console.error('error occurred:', error);
});

总结

通过这些方法,你可以轻松地在前端实现文件上传和下载的进度显示。

到此这篇关于javascript axios 实现进度监控的示例代码的文章就介绍到这了,更多相关js axios进度监控内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

使用JavaScript将PDF页面中的标注扁平化的操作指南

02-14

ESLint的简单使用方法(js,ts,vue)

02-14

前端本地数据存储的几种常见方式总结

02-14

微信小程序中使用 TDesign 组件库的方法

02-14

uni-app集成使用SQLite数据库的方法步骤

02-14

JavaScript中类(class)的介绍和应用举例详解

02-14

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论