nodejs调用后端接口返回excel文件流,nodejs再转发前端实现下载excel
今天在项目上遇到了一个问题,就是后端接口返回excel文件流,然后前端实现下载excel,前端下载的excel文件居然无法打开!
在网上搜索了很多对应的资料,也尝试了很多办法,还是没能解决,最后在这篇文章上面找到了解决的办法:http://t.csdn.cn/0u4aC ,然后我也总结了一下,希望能帮助到有希望的人!
我这个项目在客户端和后端之间还隔着一层node层,下面简单介绍一下后端返回文件流,前端实现下载excel的整体流程:
下面介绍主要的实现代码:
前端代码:
axios.post('/api/manage/downloadDataRecords', {}, { responseType: 'arraybuffer' }).then(res => {const blob = new Blob([res.data],{type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'},)const objUrl = URL.createObjectURL(blob);const eleLink = document.createElement('a');eleLink.download = '报表数据-${new Date().getTime()}.xlsx';eleLink.style.display = 'none';eleLink.href = objUrl;document.body.appendChild(eleLink);eleLink.click();document.body.removeChild(eleLink);})
注意:一定要设置responseType的值为arraybuffer
node层的代码:
// 下载
router.all('/data/download(.*)', async (ctx, next) => {const body = ctx.request.body;const method = ctx.request.method;const path = ctx.request.url;try {let res;if (method === 'GET') {res = await axios.get(`${remoteUrl}${path}`, {headers: {'Content-Type': 'application/json;charset=UTF-8'},responseType: 'arraybuffer',timeout: 6000,});} else if (method === 'POST') {res = await axios.post(`${remoteUrl}${path}`, body, {headers: {'Content-Type': 'application/json;charset=UTF-8'},responseType: 'arraybuffer',timeout: 6000,});}/*** 可以在这里打印一下,看看后端接口返回的content-type是否是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8* 如果不是则会导致下载的excel文件无法正常打开* */// console.log('====headers', res.headers); ctx.res.writeHead(200, {// 注意:后端接口响应头中的内容类型content-type必须是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8,否则下载的文件无法正常打开'Content-Type': res.headers['content-type'],'Content-Disposition': res.headers['content-disposition'], // 后端接口返回的文件名称});// ctx.body = res.data;ctx.res.end(res.data, 'binary');} catch (e) {ctx.body = e?.response?.data || e.code;}
});
注意:一定要设置responseType的值为arraybuffer
上面就是具体实现的代码了,主要的地方就是设置axios的responseType的值为arraybuffer,还有就是需要注意一下后端接口响应体中的content-type是否是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8,否则下载的excel文件无法打开或者乱码。如果有什么问题疑问,欢迎在下方留言一起讨论!
nodejs调用后端接口返回excel文件流,nodejs再转发前端实现下载excel相关推荐
- vue 后台返回的文件流进行预览_vue实现下载文件流完整前后端代码
这篇文章主要为大家详细介绍了vue实现下载文件流完整前后端代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 使用Vue时,我们前端如何处理后端返回的文件流 首先后端返 ...
- 文件下载后端返回base64文件流,使用a标签下载
后端接口返回base64文件流 <a@click="downloadFiles(item.fileName, item.url)">{{ item.fileName } ...
- SpringBoot+Vue下载Excel文件流(No converter、Excel乱码)
目录 介绍 No converter Excel乱码 正确代码 后端代码 前端代码 方法1 方法2 方法3 介绍 后端使用SpringBoot.Mybatis Plus,前端使用Vue,进行Excel ...
- Java实现Excel下载,excel文件流输出到浏览器
关于实现Excel下载,我使用的是easypoi, easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员就可以方便的写出Excel导出,Excel模板导出,Excel导 ...
- js下载get请求返回的文件流(请求头携带token)
需求是下载请求接口返回的文件流 var xhh = new XMLHttpRequest(); xhh.open("get", baseUrl+'/cert/download?na ...
- 前端处理后端返回的excel文件流并下载
项目中遇到上传excel,后端写的接口是当重复上传相同信息的excel时会吐出excel二进制文件流,这种文件流需要前端下载供用户看. 首先后端的接口需要上传文件已formData形式上传 这里我用的 ...
- 后端返回PDF文件流,前端处理展示及打印
国庆突如其来的加班q.q,上午接到的需求,只能起床啦 自己也是第一次接触这种业务需求,进行了一顿cv大法,网上有很多版本,个人学习借鉴(cv)了一下,在这里做个学习记录,欢迎各位指正优化,参考学习,如 ...
- 读取EXCEL文件数据,再调用第三方接口,将第三方数据重新写入到EXCEL文件
读取EXCEL文件数据,再调用第三方接口,将第三方数据重新写入到EXCEL文件 工作中涉及很多提供文档数据,少则几条,多则上万,少的可以自己编辑一个,静态final来自己定义,一旦数太多得话,就得使用 ...
- js接收excel文件流并解析下载文件
情景:后端为post请求,且接口返回为excel文件流 方法: 1.使用原生XMLHttpRequest 2.使用原生fetch 3.使用axios import qs from 'qs'import ...
最新文章
- 接口冲突的一种解决方法
- 【Matlab 控制】函数调用函数
- Python 网络爬虫笔记11 -- Scrapy 实战
- 嵌入式实时操作系统的基本概念——μ/COS-II读书笔记
- wxWidgets:实现框架构造器
- James Shore:敏捷的衰落
- 详析 Kubernetes 在边缘计算领域的发展
- 【OJ】洛谷分支结构题单题解锦集
- hibernate id生成策略 mysql_Hibernate中ID生成策略
- 记一次 Ubuntu Linux 动态调整分区空间
- 基于BOW模型的图像检索
- 矩形窗、汉明窗、汉宁窗的频率响应图
- 计算机pe启动蓝屏怎么办,进pe蓝屏解决方法
- 2018最新版省市区三级联动数据
- 原生方式android 商城,WooCommerce商城原生android完整客户端源码(CiyaShop)
- 【实战】(字节跳动、日本东京大学)学习使用白盒表示+GAN来创作卡通图片:Learning to Cartoonize Using White-Box Cartoon Representations
- 一站式原创文章神器,让你轻松创作高质量文章
- this.name=name;中两个name都是什么意思?
- android 仿微信 视频播放器,Android仿微信多媒体选择器 - SmartMediaPicker
- 用python搭建 百万答题 、自动百度搜索答案
热门文章
- ldpc matlab verlog,LDPC编码Verilog代码
- 多种音频文件(.wav, .mp3, .ogg)转化为wav文件,支持分、秒级别切分
- JAVA 网络编程基础
- 怎么把webp文件转换为jpg?这几种方法值得学习!
- 2021年平面设计流行趋势
- 你好,法语!A2知识点总结(2)
- Python自动化刷投票脚本开发,微信投票再也不需要发红包了
- Autodesk.ArtCAM.Premium.2017.Suite.build110.Multilang.Win64 1DVD
- Echarts 饼状图实现自动高亮扇面
- 【微信小程序】字符串转数字