Ng-Alain,使用Typescript完成文件下载,读取response header

Typescript实现点击下载文件

最近遇到一个需求,点击链接实现文件列表中某一个文件的下载,点击发送http请求后返回的是一个文件流,需要将该文件下载到本地,且因为文件列表的文件名可改变,所以需要读取response header中的filename作为下载的文件名。暂时想到两个方法实现该需求,并成功实践了其中一个。

一. 在Typescript代码中实现下载,以下为我成功运行的代码:

  download() {
    this.http.get(url, [], {
      responseType: "blob",
      //关键就在这,加了observe:'response'才能获取到返回的response header
      observe: 'response',
      headers: new HttpHeaders().append("Content-Type", "application/json")
    }).subscribe(resp => {
      // resp: 文件流
      /*这里可以在控制台看一下你能读取到的所有,header中的key,看是否有你需要的值
      resp.headers.keys().forEach(key => {
              console.log(`${key} => ${resp.headers.get(key)}`);
            });*/
      this.downloadFile(resp);
    });

  }

  downloadFile(data) {
  //当加了observe:'response'之后,文件流数据存储在了resp.body中,response header存储在resp.headers
    const blob = new Blob([data.body], {type: 'application/octet-stream'});
    const url = window.URL.createObjectURL(blob);

    // 以动态创建a标签进行下载
    const a = document.createElement('a');
    //将返回的文件名作为下载的文件名
    const fileName = data.headers.get('content-disposition').split(';')[1].split('=')[1].split('"')[1];
    a.href = url;
    a.download = fileName;
    a.click();
    window.URL.revokeObjectURL(url);
  }

在HTML代码中实现下载,以下为Ng-Alain官方文档中的介绍:

使用 “down-file” :一个基于 blob 的文件下载:
1. 导入依赖:yarn add file-saver
2. 直接在代码中加入 down-file,之后可以再使用数据绑定进行请求url、下载的文件名等参数的赋值

<button nz-button  class="mr-sm" down-file 
[http-data]="data" http-url="./assets/demo{{i}}" 
file-name="demo中文">点击下载</button>
	// URL请求参数
    httpData: {};
   //请求类型
    httpMethod: string;
   // 下载地址 
    httpUrl: string;
 	//指定文件名,若为空从服务端返回的 `header` 中获取 `filename`、`x-filename` 
    fileName: string;
    // 成功回调
    readonly success: EventEmitter<HttpResponse<Blob>>;
    // 错误回调 
    readonly error: EventEmitter<any>;

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值