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


Posted in Javascript onJuly 26, 2020

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下载流文件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript 事件冒泡简介及应用
Jan 11 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
Jan 26 Javascript
jQuery xml字符串的解析、读取及查找方法
Mar 01 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
May 12 Javascript
AngularJS控制器之间的数据共享及通信详解
Aug 01 Javascript
Easyui在treegrid添加控件的实现方法
Jun 23 Javascript
Vue组件的使用教程详解
Jan 05 Javascript
原生JS实现获取及修改CSS样式的方法
Sep 04 Javascript
详解angular2.x创建项目入门指令
Oct 11 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
Nov 28 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
Feb 22 Javascript
Vue简单实现原理详解
May 07 Javascript
vue中keep-alive、activated的探讨和使用详解
Jul 26 #Javascript
关于angular浏览器兼容性问题的解决方案
Jul 26 #Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
Jul 26 #Javascript
使用React-Router实现前端路由鉴权的示例代码
Jul 26 #Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
Jul 26 #Javascript
vue 页面回退mounted函数不执行的解决方案
Jul 26 #Javascript
vuex分模块后,实现获取state的值
Jul 26 #Javascript
You might like
用php解析html的实现代码
2011/08/08 PHP
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
php实现httpclient类示例
2014/04/08 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
2020/11/04 Javascript
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
python实现单链表的方法示例
2019/09/03 Python
Python使用微信接入图灵机器人过程解析
2019/11/04 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
如何基于pandas读取csv后合并两个股票
2020/09/25 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
统计员岗位职责
2013/11/14 职场文书
中学生团员自我评价分享
2013/12/07 职场文书
优秀毕业生自我鉴定
2014/01/19 职场文书
另类冲刺标语
2014/06/24 职场文书
公证委托书格式
2014/09/13 职场文书
八年级上册语文教学计划
2015/01/22 职场文书
工作经历证明范本
2015/06/15 职场文书
小程序实现侧滑删除功能
2022/06/25 Javascript