vue 接收后端返回的excel文件流报错?

公共方法:

export const createExcel = (res, name) => {
  let blob = new Blob([res], {
    type: 'application/vnd.ms-excel',
  });
  let fileName = name + '.xlsx'; // 文件名+后缀
  // 允许用户在客户端上保存文件
  if (window.navigator.msSaveOrOpenBlob) {
    navigator.msSaveBlob(blob, fileName);
  } else {
    // eslint-disable-next-line no-debugger
    debugger;
    var link = document.createElement('a'); //定义一个a标签
    link.href = window.URL.createObjectURL(blob); //需要生成一个 URL 来实现下载,链接到blob上
    link.download = fileName; //下载后的文件名称
    console.log('fileName', link);
    link.click(); //模拟在按钮上实现一次鼠标点击
    window.URL.revokeObjectURL(link.href); //释放 URL 对象
  }
};

接口调用getOrganExport方法

export const getOrganExport = (params) => http.get('/admin/organ/export', { params });

页面调用方法:

handleExportExcel() {
      getOrganExport({ parentId: this.nodeId }).then((res) => {
        console.log(res);
        createExcel(res, 'lala');
      });
    },

后端返回没问题

点击导出直接报错
image.png
大佬们我哪里写错了,调不动了是在

阅读 2k
2 个回答

blob的type判断一下,类似于

const contentType = res.data.type.split(";")[0]
console.log(contentType)

可能是 application/json 类型而不是你写的 application/vnd.ms-excel

看一下你的http是如何封装的,一般都会在http封装函数中判断res.data.code,你这里没有code,所以不会走进成功的判断里,如果是这样,可以给封装函数加个配置项,要不要判断res.data.code

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题