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来定义类的规范小结
Nov 19 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
Jan 11 Javascript
javascript读取xml实现javascript分页
Dec 13 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
Mar 10 Javascript
jQuery定义背景动态切换效果的方法
Mar 23 Javascript
javascript实现省市区三级联动下拉框菜单
Nov 17 Javascript
Javascript日期格式化format函数的使用方法
Aug 30 Javascript
JS+php后台实现文件上传功能详解
Mar 02 Javascript
Javascript实现鼠标移入方向感知
Jun 24 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
Nov 06 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
Nov 17 Javascript
Vue中引入svg图标的两种方式
Jan 14 Vue.js
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
Terran建筑一览
2020/03/14 星际争霸
php xml 入门学习资料
2011/01/01 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
php缓冲输出实例分析
2015/01/05 PHP
php自动获取关键字的方法
2015/01/06 PHP
PHP实现链式操作的核心思想
2015/06/23 PHP
Javascript浅谈之this
2013/12/17 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
在Node.js中使用HTTP上传文件的方法
2015/06/23 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
js实现可输入可选择的select下拉框
2016/12/21 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
vue-axios使用详解
2017/05/10 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
详解html-webpack-plugin用法全解
2018/01/22 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
javascript头像上传代码实例
2019/09/28 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
python机器学习之随机森林(七)
2018/03/26 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
单位未婚证明范本
2014/01/18 职场文书
关于迟到的检讨书
2014/01/26 职场文书
建筑工地质量标语
2014/06/12 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
导游词之太湖
2019/10/08 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL