node转发请求 .csv格式文件下载 中文乱码问题 + 文件上传笔记
用户无法直接访问后台接口 需要node端转发请求 并将数据以.csv文件格式生成以供客户端下载。 很不幸出现了中文乱码的问题
挖了各种坟帖,下了各种依赖包,csv、json2csv、bufferHelper、iconv-lite等等 多次尝试后 发现真正起作用的只有iconv-lite这个库
基本思路就是: 1. 修改header 信息,指定文件名和文件格
2. 设置返回值为二进制编码式
3. 将读取的数据段以二进制格式拼接成Buffer 此时buffer数据为GBK编码(后台返回数据的编码)的二进制数
4. 将Buffer字符串以GBK编码(注意这里需要与接口返回编码格式一致)解码 至此完成返回数据的中文乱码解决 此时为GBK格式的字符串
5. 将解码的字符串生成一个buffer
6. 将buffer以GBK格式编码 至此完成.csv文件需要的数据格式
如果接收的数据为JSON数据,就只要将其拼接成字符串,然后做1,5,6步就可以了
如果需要转成UTF-8格式 将第2步改成:
data = Buffer.concat([new Buffer('\xEF\xBB\xBF', 'binary'), new Buffer(_data)]); //excel需要BOM,每次写入数据前先加入一个utf8的BOM。utf-8对应的BOM是 EF BB BF
代码:
let fileUrl = URL + queryString;// download filelet _this = this;http.get(fileUrl, function (response) { //设置请求头_this.res.setHeader('Content-disposition', 'attachment; filename=orderData.csv');response.setEncoding('binary'); //二进制binary var data = '';response.on('data', function (_data) { //node的http模块对报文内容通过data事件触发,我们只需以流的方式处理即可
data = Buffer.concat([new Buffer('binary'), new Buffer(_data)]);}).on('end', function () { data = iconv.decode( data.toString(), 'GBK');var buffer = new Buffer(data);var str=iconv.encode(buffer,'GBK'); _this.res.send(str)}) })
表单提交:(朴灵深入浅出nodeJs)
以表单提交为例:
<form action="/upload" method="post"><label> <input type="text" /> </label><input type="submit" /></form>var hasBody = function(){return 'transfer-encoding' in req.headers || 'content-length' in req,headers;}function (req, res){if( hasBody(req) ){var buffers = [ ];req.on( 'data', function (chunk){buffers.push( chunk );} )req.on( 'end', function ( ){req,rawBody = Buffer.concat(buffers).toString( );handle(req,res);} )}else{habdle(req, res)}}var handle = function(req, res) {if( req.headers['content-type'] === 'application/x-www-form-urlencode' ){ //报文体req.body = querystring.parse(req.rawBody);}todo(req, res);}
文件上传:(朴灵深入浅出nodeJs)
需要指定表单属性enctype为multipart/form-data
引入模块formidable,它基于流式处理报文,将接受到的文件写入到系统的临时文件夹中,并返回对应的路径
function (req, res){if(hasBody(req)){if(mime(req) === 'multipart/form-data') {var form = new formidable.IncomingForm();form.parse(req, function(err, fields, files){req.body = fields;req.files = files;handle(req, res);})}} else{handle(req, res);} }
转载于:https://www.cnblogs.com/jlliu/p/9082587.html
node转发请求 .csv格式文件下载 中文乱码问题 + 文件上传笔记相关推荐
- SecureCRT中文乱码,导致上传到nginx上的文件乱码,访问报404
问题背景:因使用secureCRT工具,上传文件到linux系统nginx服务上,因部分文件名包含中文,导致访问路径报错404,查看时显示乱码等问题. 一般解决办法 1. 右键点击SecureCRT的 ...
- Node.js 博客实例(三)添加文件上传功能
原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第三章 上传文件眼下有三种方法: 使用 Express 自带的文件上传功能,不涉及数据库 使用 For ...
- JAVA 文件上传格式限制_关于servlet文件上传限制文件大小的问题,求高手帮忙
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 首先,能上传900多K的文件1M以上的文件上传不了,我也试着修改限制文件上传的大小,但是设置完了,还是有错误,代码和错误如下: upload2 DiskF ...
- php 多文件上传与下载,php实现文件下载跟多文件上传
php实现文件下载和多文件上传 文件下载: html: 文件上传: html代码:请选择您要上传的文件: 请选择您要上传的文件: 请选择您要上传的文件: 请选择您要上传的文件: 请选择您要上传的文件: ...
- 简单的node文件上传下载及中文乱码问题解决
1. 基于MEAN的技术栈,使用restful风格的接口 2. 在前端代码中放置文件上传按钮和处理表单数据 <div class="upload-file btn btn-sm btn ...
- csv导出文件解决中文乱码和文件名空格问题
csv导出文件解决中文乱码和文件名空格问题 开发环境 前端:Vue 后端:Java 问题的出现: 1.csv的文件中文内容 excel打开是乱码,wps没问题(wps会进行不同的编码转换,excel不 ...
- 微信小程序模板消息(服务通知消息)原始post工具封装(不使用jar包--坑比较多),解决47001(JSON格式)和中文乱码问题
微信小程序模板消息(服务通知消息)原始post工具封装(不使用jar包--坑比较多),解决47001(JSON格式)和中文乱码问题 参考文章: (1)微信小程序模板消息(服务通知消息)原始post工具 ...
- java ftp 下载慢_Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题
废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadToFTP(String url,int port,String usern ...
- 解决Node.js 运行的时候出现中文乱码问题
解决Node.js 运行的时候出现中文乱码问题 一.问题:出现如下乱码 二.解决方案 因为在服务器发送数据,其实是utf-8编码内容 ,但是浏览器不知道你是utf-8编码内容, 浏览器在不知道服务器响 ...
最新文章
- mysqlsla slow-query常用用法
- Ubuntu环境下TensorFlow 的环境搭建(二)安装TensorFlow(CPU版)
- 在继承类中,父类在子类中初始化问题,已解决
- Linux——基础IO(总结)
- 判断字符串中是否包含Emoji表情代码
- hadoop fs.trash 详解
- java groovy 表达式_Groovy的基础语法
- hadoop安装(包含hive)
- python 彩票深度学习_Python数据分析:双色球的深度学习预测
- web网站http转成https
- C语言绝对地址函数创建和读取函数
- css之让尾部永远固定在页面最下方
- WhatsApp电脑版和WhatsApp网页版区别?
- 五千来多字,就为了聊聊HTTP报文,请求响应头,cookie以及HTTPS加密方式
- bzoj 1022: [SHOI2008]小约翰的游戏John anti_nim游戏
- h5跳转微信小程序,短信外链外部跳转微信打开任意第三方网址url,抖音跳转微信添加好友直接方法?
- 超全!182所大学的考研复试参考书目/复试通知
- 免费discuz 白色简洁论坛类源码下载
- 【Skill】从 WPS 步入Office 365
- 星际公民服务器位置,《星际公民》3.0测试服务器上线 游戏实际内容展示
热门文章
- CS144 lab4 计算机网络实验 笔记
- python中cumsum_在python里“np.cumsum”这个命令是干什么的?怎么使用?
- 计算机多媒体设计徽章,酷毙了:Hackaday将会议徽章设计成一台可编程的电脑
- 【python+selenium自动化】使用pytest+allure2完成自动化测试报告的输出
- Thinkpad Access Connections实现快速的在各种网络间进行切换
- Myeclipse下Maven的配置
- 树状数组成段更新模板
- 每天一个JavaScript实例-动态省份选择城市
- Java达到MySQL数据库备份(两)
- 什么是Ext(ExtJs)【转载】