后端采用文件流的方式将文件信息发送给前端,前端需要接收相应的流信息做出对应的操作
1.请求后端接口返回文件流:
axios({
url, //请求地址
method:'get', //请求方式
responseType:'blob' //请求相应文件流类型
}).then(res=>{
let name = ''//根据 type 的值不同 定义不同文件名称
if(this.type === 1){
name = '文件名'
}else if(this.type === 2){
name = '文件名'
}else if(this.type === 3){
name = '文件名'
}
let type = 'xlsx' //文件类型
this.downloadZip(res.data,name,type) //调用下载方法
})
2.处理文件流方法 下载文件
/**
* 下载压缩包文件
* @param {blob} fileArrayBuffer 文件流
* @param {String} filename 文件名称
* @param {String} fileType 文件格式
*/
downloadZip (fileArrayBuffer, filename, fileType) {
//new Blob([文件流],{文件类型 === 'zip' 吗? 是 : 不是 }) 创建二进制对象,
let data = new Blob([fileArrayBuffer], { type: fileType == 'zip' ? 'application/zip,charset=utf-8' : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
if (typeof window.chrome !== 'undefined') {
// Chrome
var link = document.createElement('a');
link.href = window.URL.createObjectURL(data);
link.download = filename;
link.click();
console.log(data);
} else if (typeof window.navigator.msSaveBlob !== 'undefined') {
// IE
var blob = new Blob([data], { type: fileType == 'zip' ? 'application/zip' : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
window.navigator.msSaveBlob(blob, filename);
} else {
// Firefox
var file = new File([data], filename, { type: fileType == 'zip' ? 'application/zip' : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
window.open(URL.createObjectURL(file));
}
},