Blob下载文件流

208 阅读1分钟

后台地址返回的二进制,需要我们处理的方式如下

//封装的方法
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('附件下载失败!')
    })
}