vue3+axios哀求导出excel文件

打印 上一主题 下一主题

主题 687|帖子 687|积分 2071

 在Vue 3中使用axios哀求导出Excel文件,可以发送一个GET或POST哀求,并设置响应范例为blob或arraybuffer,然后使用new Blob()构造函数创建一个二进制文件,最后使用URL.createObjectURL()生成一个可以下载的链接。
先看代码
  1. import axios from 'axios';
  2. // 导出Excel文件的函数
  3. export function exportExcel() {
  4.   const url = '/api/export'; // 替换为你的接口地址
  5.   axios({
  6.     method: 'get',
  7.     url: url,
  8.     responseType: 'blob', // 重要!设置响应类型为blob或arraybuffer
  9.   })
  10.   .then(response => {
  11.     // 创建一个新的Blob对象,设置文件类型
  12. //response.data是后端返回的文件流数据,如果response是文件流就直接用response,根据后端返回实际情况而定
  13.     const blob = new Blob([response.data], { type: 'application/vnd.ms-excel;charset=UTF-8' });
  14.     // 创建一个指向新Blob对象的URL
  15.     const url = window.URL.createObjectURL(blob);
  16.     // 创建一个a标签用于下载
  17.     const link = document.createElement('a');
  18.     link.href = url;
  19.     link.setAttribute('download', 'export.xls'); // 设置下载文件名
  20.     document.body.appendChild(link);
  21.     // 触发下载
  22.     link.click();
  23.     // 清理并移除元素和对象URL
  24.     document.body.removeChild(link);
  25.     window.URL.revokeObjectURL(url);
  26.   })
  27.   .catch(error => {
  28.     console.error('导出Excel失败:', error);
  29.   });
  30. }
复制代码
后端返回的数据是一个二进制数据流,可以console.log(response)打印一下响应数据,查看数据是不是Blob范例,如果不是的话可能会出现乱码、undefined等环境
以arraybuffer范例为准的post哀求,以下是后端返回数据截图,这里response的值是文件流
后端返回的数据

 响应拦截器获取到的数据

 打印的response数据

 如果前端得到的数据布局跟上面截图一样,大概是没有问题的,如果出现中文乱码、undefined等环境,可以检查一下是否在哀求时设置了响应范例,blob和arraybuffer还是有区别的,blob不可就试试arraybuffer

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宁睿

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表