Angular下载文本文档或者压缩包功能的实现

1.html里绑定下载函数

 <button (click)="exportConfirm()" >下载</button>

2.ts里编写下载逻辑


// 接收数据;
paramData: any = null;
//下载文件
exportConfirm(){
    //要求后端返回的内容为二进制流
    let info = { responseType: 'arraybuffer'};
    //请求HTTP下载
    const params = new HttpParams();
    //对时间进行规范化处理,如果没有要求可省略此步骤
    var now  = new Date();
    let nowNew = formatDate(now, 'yyyyMMddHHmm', 'zh-cn');
    //向后端先请求下载功能,后端将所需下载的内容转换成二进制流返回给前端,前端拿到返回的二进制流进行处理,将其转换成.xls格式或者.zip格式等等
    this.service.downloadLog(params,info,this.downloadLogParams).subscribe(data => {
        this.alarmManagementService.download(data,this.paramData,'periodic',nowNew)
   });
}

3.service里写接口以及返回二进制流处理

文本文档格式的下载(get请求):

  // 遍历拼接对象
  traverse(obj) {
    let traverse = '?';
    for (var i in obj) {
      if (obj[i]) {
        traverse = traverse + i + '=' + obj[i] + '&';
      }
    }
    return (traverse = traverse.substring(0, traverse.length - 1));
  }
   // 请求下载
  downloadLog(params, info,a) {
    let obj=this.traverse(a)
    return this.http.get<any>
    ( `${this.url}/hbrop` + obj, {
      params: params,
      responseType: info.responseType
    });
  }

  // 下载并转换成文本文档格式
 download(data, content, type) {
  const blob = new Blob([data], {
  //转换成文本格式所需的type内容
    type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
  });
  // 自定义导出excel表名字
  var file = '历史作业.xls';
  saveAs(blob, file);
}

压缩包格式的下载(post请求):

 // 请求下载
 downloadLog(params,info,downloadLogParams){
  return this.http.post<any>(`${this.URL}/hbrop/`,downloadLogParams, {
    params: params,
    responseType: info.responseType,
  });
}

// 下载并转换成压缩包格式
download(data, content, type,time) {
  const blob = new Blob([data], {
  //转换成压缩包格式所需的type内容
  'type':'application/zip'
   });
  let fileName = "log" + "-" + time + "-" + ".tar";//自定义导出名字
  saveAs(blob, fileName);
}
发布了18 篇原创文章 · 获赞 1 · 访问量 3824

猜你喜欢

转载自blog.csdn.net/qq_36398269/article/details/103538906
今日推荐