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/Css 文件的代码
Jul 03 Javascript
jQuery写的日历(包括日历的样式及功能)
Apr 23 Javascript
jquery text()方法取标签中的文本
Jul 25 Javascript
javascript如何写热点图
Dec 08 Javascript
Bootstrap表单布局
Jul 19 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
Oct 13 Javascript
Angularjs使用指令做表单校验的方法
Mar 31 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
May 10 Javascript
详解vue-cli3开发Chrome插件实践
May 29 Javascript
Vuex的API文档说明详解
Feb 05 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
Jul 11 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
Oct 21 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
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
2016/05/20 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
Vue中JS动画与Velocity.js的结合使用
2019/02/13 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
JavaScript实现轮播图片完整代码
2020/03/07 Javascript
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
python实现定时播放mp3
2015/03/29 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
python实现代码统计器
2019/09/19 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
web页面录屏实现
2019/02/12 HTML / CSS
介绍一下Ruby的特点
2013/01/20 面试题
交通法规咨询中心工作职责
2013/11/27 职场文书
一年级班主任寄语
2014/01/19 职场文书
尽职尽责村干部自我鉴定
2014/01/23 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
2015年商场工作总结
2015/04/27 职场文书
论语读书笔记
2015/06/26 职场文书
趣味运动会通讯稿
2015/07/18 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python