前端下载文件流

最近几个项目都有前端导出文件的功能,在此记录一下以备查询。

以往的简单下载后端只提供了一个请求地址,前端可以直接在新页面中打开这个地址,浏览器会自动下载文件,但是有时候会遇到附带筛选条件的导出,这种方法就无法升任了。

此时需要通过异步请求向后端发送筛选条件数据,再把后端返回的数据解析出来,通过a标签下载。

首先需要在http请求头中添加responseType,一般来说后端返回的会是字符流,可以设置为blob,如果返回的是二进制数组需要设置为arrayBuffer。

然后是处理返回的数据,先将数据转换为Blob对象,再把Blob对象转为a标签href属性可以指向的地址,具体代码如下:

let url = window.URL.createObjectURL(new Blob([data]));//data就是http请求返回的数据
let link = document.createElement("a");
link.download = "文件名.xls"; // 文件名可以从返回头Content-Disposition中获取,怕麻烦可以直接在这里设置
link.href = url;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);

 

posted @ 2021-05-31 16:42  KlllB  阅读(255)  评论(0编辑  收藏  举报