键盘都给你敲烂 2022-05-05 13:47 采纳率: 33.3%
浏览 2230

vue 使用blob下载文件,打开文件,文件是损毁的,求解决办法!

文件下载, 我已经设置了responseType:'blob', 查看打印台数据是blob格式, 下载下来以后打开文件时 word文件打开提示文件损坏,并且显示乱码, excel文件打开内容是空, 图片打开是损毁的。
async handleClick(row) {
  let res = await download(
    { datumId: row.datumId },
    { responseType: "blob" }
  );
  let data = res.data;
  console.log(res);
  const blob = new Blob([data], {
    type: "application/octet-stream",
  });
  const link = document.createElement("a");
  link.href = URL.createObjectURL(blob);
  link.setAttribute("download", row.fileName); // 设置下载文件名称
  document.body.appendChild(link);
  link.click();
  document.body.appendChild(link);
}

img

img

img

img

网上有说mock有影响,可我删了依然没有用
  • 写回答

7条回答 默认 最新

  • 烈火玄机 2023-03-16 18:23
    关注

    我也遇到了同样的问题,首先,后端链接在浏览器里打开能够直接下载,然后通过vue请求到blob数据之后下载打开就会说文件已损坏!查了好多办法也不行该设置的responseType: "blob"也写了。
    后来解决的办法是:使用axios直接写请求,而不是使用项目封装的方法,其次在返回的时候我们要new Blob的不是res,而是res.data
    以下是我请求的全部代码,希望能帮广大同仁解决问题!

    axios.get(this.apiURL+"/sys/user/testExport", {
           responseType: "blob" // 或者blob,GET请求用blob??有待考证
          }).then(res => {
            //console.log(res,6677)
           // 这里的type最好参考Response Headers里面的content-type,有可能是application/vnd.ms-excel
           let blob = new Blob([res.data], {
            type: 'application/vnd.ms-excel; charset=utf-8'
           })
           //console.log(blob,122)
           // 获取文件名,根据自己需要的分割
           let fileName = 'aaa.xlsx'
           let a = document.createElement('a')
           let url = window.URL.createObjectURL(blob)
           a.href = url
           a.download = fileName
           document.body.appendChild(a)
           a.style.display = 'none'
           a.click()
           document.body.removeChild(a)
           window.URL.revokeObjectURL(url)
          })
    
    
    评论

报告相同问题?

问题事件

  • 修改了问题 5月5日
  • 创建了问题 5月5日

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码