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);
}