vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue导出Excel,后端返回的文件流,前端接收后无法打开文件

Vue导出Excel,后端返回的文件流,前端接收后无法打开文件的解决

作者:Z兽兽

在使用Vue导出Excel时,如果后端返回文件流,前端接收后无法打开文件,通常是由于响应类型设置不正确导致的,通过设置axios请求接口时的响应类型为`blob`,并使用blob转换文件流,可以解决文件损坏无法打开的问题

Vue导出Excel,后端返回的文件流,前端接收后无法打开文件

在项目中导出excel时,提示文件损坏无法打开,但后端测试接口是没问题的,那么就前端看问题了。

1. axios请求接口时设置响应类型字段

responseType: 'blob'

2. 使用blob转换文件流

axios({
    method: 'post',
    url: '/download',
    params: {id}, // URL 参数
    data: JSON.stringify(bodyData),  //body请求体
    headers: { 
      'Authorization': userinfo.token,
      "Content-Type":"application/json", 
    },
    responseType: "blob",  //设置为blob,不然导出的Excel无法打开
    timeout: 60000, // 超时时间(毫秒)
    baseURL: `${VITE_JAVASERVER_HOST}`  //基础URL
  })
    .then(async(response) => {
      const fileName = 'xxx';
      const blob = await new Blob([response.data])
      // 创建下载链接
      const url = window.URL.createObjectURL(blob);
      const a = document.createElement("a");
      a.href = url;
      a.download = fileName; // 设置下载文件名(可自定义)
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      window.URL.revokeObjectURL(url); // 释放内存
    })
    .catch((error) => {
      console.error("Error:", error);
    });

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文