当前位置: 移动技术网 > IT编程>脚本编程>AngularJs > Angular利用HTTP POST下载流文件的步骤记录

Angular利用HTTP POST下载流文件的步骤记录

2020年08月17日  | 移动技术网IT编程  | 我要评论
angular / vue http post下载流文件http post 请求流文件转成excel在使用angular开发项目时,通常会有下载文件的功能项。一般是后台返回下载地址,通过 <a&

angular / vue http post下载流文件

http post 请求流文件转成excel

在使用angular开发项目时,通常会有下载文件的功能项。一般是后台返回下载地址,通过 <a> 标题或者使用 window 打开下载地址新窗口,浏览器则会识别出流文件进行文件下载。

但是,有时候进行http异步请求,后台返回的并不是下载地址,而是直接返回一个文件流,这时如何使用http请求回来的文件流转换成文件下载?

其实并非angular框架存地这样的情况,其他pwa如vue,react甚至jquery都通过http xhr进行请求而获取的流文件,浏览器也并不会自动识别并自动下载。

那当然,肯定有解决方案。

方案思路:

http请求使用blob的返回类型,获取文件流后,对数据进行blob,再提交给浏览器进行识

下面是代码示例

/**
 * 导出excel
 */
exportexcel(){
 const params = {}; // body的参数
 const queryparams = undefined; // url query的参数
 this.http.post(this.exporturl, params, queryparams, {
 responsetype: "blob",
 headers: new httpheaders().append("content-type", "application/json")
 }).subscribe(resp=>{
 // resp: 文件流
 this.downloadfile(resp);
 })
}

/**
 * 创建blob对象,并利用浏览器打开url进行下载
 * @param data 文件流数据
 */
downloadfile(data) {
 // 下载类型 xls
 const contenttype = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
 // 下载类型:csv
 const contenttype2 = 'text/csv';
 const blob = new blob([data], { type: contenttype });
 const url = window.url.createobjecturl(blob);
 // 打开新窗口方式进行下载
 // window.open(url); 

 // 以动态创建a标签进行下载
 const a = document.createelement('a');
 const filename = this.datepipe.transform(new date(), 'yyyymmdd');
 a.href = url;
 // a.download = filename;
 a.download = filename + '.xlsx';
 a.click();
 window.url.revokeobjecturl(url);
}

总结

到此这篇关于angular利用http post下载流文件的文章就介绍到这了,更多相关angular用http post下载流文件内容请搜索移动技术网以前的文章或继续浏览下面的相关文章希望大家以后多多支持移动技术网!

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网