vue3+axios请求导出excel文件

在Vue 3中使用axios请求导出Excel文件,可以发送一个GET或POST请求,并设置响应类型为blob或arraybuffer,然后使用new Blob()构造函数创建一个二进制文件,最后使用URL.createObjectURL()生成一个可以下载的链接。

先看代码

复制代码
import axios from 'axios';
 
// 导出Excel文件的函数
export function exportExcel() {
  const url = '/api/export'; // 替换为你的接口地址
  axios({
    method: 'get',
    url: url,
    responseType: 'blob', // 重要!设置响应类型为blob或arraybuffer
  })
  .then(response => {
    // 创建一个新的Blob对象,设置文件类型
//response.data是后端返回的文件流数据,如果response是文件流就直接用response,根据后端返回实际情况而定
    const blob = new Blob([response.data], { type: 'application/vnd.ms-excel;charset=UTF-8' });
    // 创建一个指向新Blob对象的URL
    const url = window.URL.createObjectURL(blob);
    // 创建一个a标签用于下载
    const link = document.createElement('a');
    link.href = url;
    link.setAttribute('download', 'export.xls'); // 设置下载文件名
    document.body.appendChild(link);
    // 触发下载
    link.click();
    // 清理并移除元素和对象URL
    document.body.removeChild(link);
    window.URL.revokeObjectURL(url);
  })
  .catch(error => {
    console.error('导出Excel失败:', error);
  });
}

后端返回的数据是一个二进制数据流,可以console.log(response)打印一下响应数据,查看数据是不是Blob类型,如果不是的话可能会出现乱码、undefined等情况

以arraybuffer类型为准的post请求,以下是后端返回数据截图,这里response的值是文件流

后端返回的数据

响应拦截器获取到的数据

打印的response数据

如果前端得到的数据结构跟上面截图一样,大概是没有问题的,如果出现中文乱码、undefined等情况,可以检查一下是否在请求时设置了响应类型,blob和arraybuffer还是有区别的,blob不行就试试arraybuffer

相关推荐
FlyWIHTSKY19 小时前
Vue 3 onMounted 中控制同步与异步执行策略
前端·javascript·vue.js
PascalMing19 小时前
告别 Nginx!ASP.NET Core 实现多域名 Vue 静态服务与代理转发
vue.js·nginx·asp.net
蜗牛攻城狮19 小时前
【Vue3实战】El-Table实现“超过3行省略,悬停显示全文”的完美方案(附性能优化)
前端·vue.js·性能优化·element-plus
隔壁小邓19 小时前
vue的组件化的理解之单独拆分的组件&组件的封装
前端·javascript·vue.js
Ivanqhz19 小时前
图着色寄存器分配算法(Graph Coloring)
开发语言·javascript·python·算法·蓝桥杯·rust
我命由我1234519 小时前
Element Plus 问题:选择框表单校验没有触发
开发语言·前端·javascript·html·ecmascript·html5·js
optimistic_chen19 小时前
【Vue3入门】vue-router 路由管理
前端·javascript·vue.js·路由·router
捕捉一只前端小白20 小时前
cpolar内网穿透以及微信小程序域名设置
前端·vue.js·微信小程序·小程序
wuhen_n20 小时前
ESLint + Prettier + Husky + lint-staged:建立自动化的高效前端工作流
前端·javascript·vue.js
xiangpanf20 小时前
PHP与Vue:前后端技术深度对比
开发语言·vue.js·php