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 相关文章推荐
一个简单的js鼠标划过切换效果
Jun 30 Javascript
九种js弹出对话框的方法总结
Mar 12 Javascript
jquery ajax jsonp跨域调用实例代码
Dec 11 Javascript
jquery鼠标停止移动事件
Dec 21 Javascript
JavaScript中length属性的使用方法
Jun 05 Javascript
JavaScript实现动态删除列表框值的方法
Aug 12 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
Oct 09 Javascript
Bootstrap基本布局实现方法详解
Nov 25 Javascript
JavaScript之underscore_动力节点Java学院整理
Jul 03 Javascript
Element-ui table中过滤条件变更表格内容的方法
Mar 02 Javascript
这样回答继承可能面试官更满意
Dec 10 Javascript
JavaScript 去重和重复次数统计
Mar 31 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
discuz Passport 通行证 整合笔记
2008/06/30 PHP
php删除数组元素示例分享
2014/02/17 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
jquery实现文本框数量加减功能的例子分享
2014/05/10 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
jQuery实现的简单悬浮层功能完整实例
2017/01/23 Javascript
Vue组件开发初探
2017/02/14 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
详解webpack自定义loader初探
2018/08/29 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
js实现点赞效果
2020/03/16 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
Python的Flask站点中集成xhEditor文本编辑器的教程
2016/06/13 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
Python 变量类型详解
2018/10/10 Python
详解python调用cmd命令三种方法
2019/07/08 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
元旦获奖感言
2014/03/08 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
领导参观欢迎词
2015/01/26 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书