一般来说,后端如果请求接口直接返回一个文件的话,我们可以直接, 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',要改成这个才行。