时间:2021-05-28
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下载流文件内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
GoGin实现文件的上传下载流读取文件上传routerrouter.POST("/resources/common/upload",service.Upload
我就废话不多说了,大家还是直接看代码吧~前端项目下载导出文件/***post方式*返回:文件流*好处:可以自己修改文件名称方便调试*/letparams={Li
Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块。当然你也可以利用ftplib从ftp站点下载文件
•axios接受文件流,需要设置{responseType:'arraybuffer'}axios.post(apiUrl,formdata,{re
本文基于httpRangeRequests协议,实现了分片下载的功能。使用场景包括基于浏览器的流文件片段传输、基于客户端的分片下载等。原理http通过Range