记录下最近碰到的前端下载二进制流文件的方法:
1.使用blob方式
在请求头添加 respenseType:blob
// 通用下载接口
export function getFile(params) {
return request({
url: '/qyjg/common/getFile',
method: 'get',
responseType:"blob",
params
})
}
在请求中,后端有时会直接把二进制流返回,所以需要在请求拦截单独处理返回,这里简单根据response.data.type进行处理
service.interceptors.response.use(
response => {
let res = response.data
if(response.data.type) {
return response.data
}
})
再需要下载的页面中
upload(row){
getFile({fileId:row.fileId}).then(res=>{
let blob;
blob = new Blob([res], {
type: res.type, //将会被放入到blob中的数组内容的MIME类型
});
let objectUrl = URL.createObjectURL(blob); //生成一个url
let a = document.createElement("a"); // 创建a标签
a.download = row.realName // 文件的名称 需要后缀名
a.href = objectUrl;
a.click();
})
},