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 相关文章推荐
替代window.event.srcElement效果的可兼容性的函数
Dec 18 Javascript
JavaScript和JQuery实用代码片段(一)
Apr 07 Javascript
jQuery统计上传文件大小的方法
Jan 24 Javascript
浅谈JavaScript超时调用和间歇调用
Aug 30 Javascript
Ajax 加载数据 练习代码
Jan 05 Javascript
js实现彩色条纹滚动条效果
Mar 15 Javascript
简单实现js轮播图效果
Jul 14 Javascript
详解jQuery中关于Ajax的几个常用的函数
Jul 17 jQuery
基于JavaScript实现弹幕特效
Aug 27 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
Aug 17 Javascript
小程序实现投票进度条
Nov 20 Javascript
小程序实现tab标签页
Nov 16 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 FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
php获取apk包信息的方法
2014/08/15 PHP
跟我学Laravel之安装Laravel
2014/10/15 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
PHP工厂模式的日常使用
2019/03/20 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
python求绝对值的三种方法小结
2019/12/04 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
python实现字符串和数字拼接
2020/03/02 Python
英国著名音像制品和图书游戏购物网站:Zavvi
2016/08/04 全球购物
weblogic面试题
2016/03/07 面试题
what is the difference between ext2 and ext3
2013/11/03 面试题
初一体育教学反思
2014/01/29 职场文书
物业总经理岗位职责
2014/02/28 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
公司踏青活动方案
2014/08/16 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
班主任经验交流材料
2014/12/16 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL