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 相关文章推荐
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
Apr 01 Javascript
jquery在Chrome下获取图片的长宽问题解决
Mar 20 Javascript
解析JavaScript中的不可见数据类型
Dec 02 Javascript
理解jQuery stop()方法
Nov 21 Javascript
浅谈Javascript数组(推荐)
May 17 Javascript
关于JavaScript和jQuery的类型判断详解
Oct 08 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
Feb 20 Javascript
Bootstrap导航中表单简单实现代码
Mar 06 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
Aug 28 Javascript
vue项目设置scrollTop不起作用(总结)
Dec 21 Javascript
详解js location.href和window.open的几种用法和区别
Dec 02 Javascript
使用next.js开发网址缩短服务的方法
Jun 17 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
PHP4 与 MySQL 交互使用
2006/10/09 PHP
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
使用D3.js制作图表详解
2017/08/13 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
[02:03]完美世界DOTA2联赛10月30日赛事集锦
2020/10/31 DOTA
Python学生成绩管理系统简洁版
2020/04/05 Python
Python编程scoketServer实现多线程同步实例代码
2018/01/29 Python
用python与文件进行交互的方法
2018/03/01 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
python递归下载文件夹下所有文件
2019/08/31 Python
python3 求约数的实例
2019/12/05 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
商务英语专业毕业生自荐信
2013/11/05 职场文书
绩效工资实施方案
2014/03/15 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
动物科学专业求职信
2014/07/27 职场文书
中学生纪念九一八事变演讲稿
2014/09/14 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
出差报告怎么写
2014/11/06 职场文书
给老婆的保证书
2015/01/16 职场文书
感谢信格式范文
2015/01/22 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
搭建Yolov5服务器
2022/04/30 Servers