Angular利用HTTP POST下载流文件的步骤记录
Angular/VueHTTPPOST下载流文件
HTTPPOST请求流文件转成excel
在使用Angular开发项目时,通常会有下载文件的功能项。一般是后台返回下载地址,通过标题或者使用window打开下载地址新窗口,浏览器则会识别出流文件进行文件下载。
但是,有时候进行http异步请求,后台返回的并不是下载地址,而是直接返回一个文件流,这时如何使用http请求回来的文件流转换成文件下载?
其实并非Angular框架存地这样的情况,其他PWA如Vue,React甚至Jquery都通过httpxhr进行请求而获取的流文件,浏览器也并不会自动识别并自动下载。
那当然,肯定有解决方案。
方案思路:
http请求使用blob的返回类型,获取文件流后,对数据进行Blob,再提交给浏览器进行识
下面是代码示例
/**
*导出excel
*/
exportExcel(){
constparams={};//body的参数
constqueryParams=undefined;//urlquery的参数
this.http.post(this.exportUrl,params,queryParams,{
responseType:"blob",
headers:newHttpHeaders().append("Content-Type","application/json")
}).subscribe(resp=>{
//resp:文件流
this.downloadFile(resp);
})
}
/**
*创建blob对象,并利用浏览器打开url进行下载
*@paramdata文件流数据
*/
downloadFile(data){
//下载类型xls
constcontentType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
//下载类型:csv
constcontentType2='text/csv';
constblob=newBlob([data],{type:contentType});
consturl=window.URL.createObjectURL(blob);
//打开新窗口方式进行下载
//window.open(url);
//以动态创建a标签进行下载
consta=document.createElement('a');
constfileName=this.datePipe.transform(newDate(),'yyyyMMdd');
a.href=url;
//a.download=fileName;
a.download=fileName+'.xlsx';
a.click();
window.URL.revokeObjectURL(url);
}
总结
到此这篇关于Angular利用HTTPPOST下载流文件的文章就介绍到这了,更多相关Angular用HTTPPOST下载流文件内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。