后端返回一个文件流,前端下载文件遇到的问题

114 阅读1分钟

一般来说,后端如果请求接口直接返回一个文件的话,我们可以直接, location.href="后端接口地址"

但是有时候,请求可能不是get请求,或者需要在下载文件的时候传送一些字段给后端,那我们就只能按照常规的请求方式去处理了。

如下

this.$http.get(
  getUrl,
  {
    responseType:'Blob',
  }
).then((res) => {
  const content = res.data;
  const blob = new Blob([content]);
  const elink = document.createElement('a')//创建一个a标签通过a标签的点击事件区下载文件
  elink.download = '本月报表.doc';
  elink.style.display = 'none'
  elink.href = URL.createObjectURL(blob)//使用blob创建一个指向类型数组的URL
  document.body.appendChild(elink)
  elink.click()
  URL.revokeObjectURL(elink.href) // 释放URL 对象
  document.body.removeChild(elink);
})

这样请求的DOC文件是正常的,但是到了xls文件,下载后,打开一看就乱码了。 后来查找资料,发现如果是xls文件,responseType:'arraybuffer',要改成这个才行。