后台地址返回的二进制,需要我们处理的方式如下
//封装的方法
public static downloadWithBlob(url:string,name:string):any{
if(!url || !name)return Promise.resolve(false);
return fetch(url!).then(res => res.blob().then(blob => {
let a = document.createElement('a');
//会创建一个 domstring,蚕食是给出的对象的URL,这个新的URL对象表示指定的File,Blob对象;
let url = window.URL.createObjectURL(blob);
let filename = name;
a.href = url;
a.download = filename!;
a.click();
window.URL.revokeObjectURL(url);
}))
.then(()=>{
return Promise.resolve(true);
})
.catch(()=>{
return Promise.resolve(false);
})
}
//使用
downLoad(path: string,title: string){
Utils.downloadWithBlob(path,title)
.then((val: boolean) => {
// this.$message.success('附件下载成功!');
if (!val) this.$message.error('附件下载失败!')
return GrPromise.resolve();
})
.catch(() => {
this.$message.error('附件下载失败!')
})
}