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

 

代码:

const fs = require('fs');
const http = require('http')
const iconv = require('iconv-lite');
*download(){
          let queryString = this.req.query.filter;
        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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html中设置负边距的意义,css负边距之详解

自从1998年CSS2作为推荐以来&#xff0c;表格的使用渐渐退去&#xff0c;成为历史。正因为此&#xff0c;从那以后CSS布局成为了优雅代码的代名词。对于所有设计师使用过的CSS概念&#xff0c;负边距作为最少讨论到的定位方式要记上一功。这就像是在线纹身-每个人都会做&#x…

warning: expression result unuesd 可能原因是函数忘了加括号,

转载于:https://www.cnblogs.com/chulin/p/9082833.html

计算机怎样辅助英语听力教学方法有哪些,计算机辅助教学在英语听力中的运用.doc...

计算机辅助教学在英语听力中的运用.docPAGEPAGE 5计算机辅助教学在英语听力中的运用摘要&#xff1a;随着现代科学技术与电脑的发展&#xff0c;计算机辅助教学比以往运用的更加广泛&#xff0c;在计算机的帮助下&#xff0c;我们可以把大量的网上信息运用到英语教学中&#xf…

vue基础18(vue-cli脚手架项目中组件的使用)

vue-cli脚手架项目中组件的使用 在webpack-simple模板中&#xff0c;包括webpck模板。一个.vue文件就是一个组件。 为什么会这样呢&#xff1f;因为webpack干活了&#xff01;webpack的将我们所有的资源文件进行打包。同时webpack还能将我们的html&#xff08;template&#xf…

计算机科学与导论期末论文,计算机科学与导论论文3

由下到上按左到右的顺序排列&#xff0c;则11用二进制表示为1011。4.3.3整数的机器数表达方法A、一般表示法首先将数转换成二进制&#xff1b;忽略符号&#xff0c;左侧用0补充空位至指定位数-1&#xff1b;如果是正数&#xff0c;在最高位加0&#xff0c;如果是负数则加1。例如…

js和layerjs配合实现的拖拽表格列

前几天想着实现表格列的拖拽 写了个例子 一直不完美 经过修改感觉还算完美了 拖拽过程不会复制文字并且还能实现layerjs本身自带的表格排序功能。 1、首先引入layer.css jquery layui.all.js 2、布局页面 <div class"divT"> <table class"l…

计算机应用中的CAI,????按计算机应用的分类,CAI应属于()应用。

按计常见的企业法律组织形式有()&#xff1f;算机属于recoil固有的、应用I应应用本来的按计cant help but算机属于Destruction of the original forest leads to the ___ of many plants.应用I应应用flocks of的同义词按计Many birds ___ southeast in winter.支持、算机属于供…

(tmp 8) 0xff;

以下是阅读他人文章后&#xff0c;个人对计算 (tmp >> 8) & 0xff; 的理解&#xff1a; 将tmp转为二进制数 6322040->11000000111011101111000,向右移16位&#xff08;清掉该16位&#xff09;&#xff0c;且左边用0补足16位 00000000000000001100000&#xff0c;将…

请对比html与css的异同,css3与css2的区别是什么?

CSS为HTML标记语言提供了一种样式描述&#xff0c;定义了其中元素的显示方式。CSS在Web设计领域是一个突破。利用它可以实现修改一个小的样式更新与之相关的所有页面元素。CSS2.0是一套全新的样式表结构&#xff0c;是由W3C推行的&#xff0c;同以往的CSS1.0或CSS1.2完全不一样…

MySQL数据导入导出(一)

今天遇到一个需求&#xff0c;要用自动任务将一张表的数据导入另一张表。具体场景及限制&#xff1a;将数据库A中表A的数据导入到数据库B的表B中&#xff08;增量数据或全量数据两种方式&#xff09;&#xff1b;体系1和体系2只能分别访问数据库A和数据库B。附图&#xff1a; 实…

收藏夹库计算机网络的关系,云南省计算机一级考试题库 计算机网络及基础.pdf...

云南省计算机一级考试题库 计算机网络及基础云南省计算机一级考试题库:第六章计算机网络及 Internet 基础一、是非题1&#xff0e;分布式处理是计算机网络的特点之一。A&#xff0e;对 B&#xff0e;错2&#xff0e;组建一局域网时&#xff0c;网卡是必不可少的网络通讯硬件。A…

春考计算机组装维修知识点,【校选修】计算机组装与维修 考试题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼需要的拿走 不需要的。。忽略1.简述主板概念主板&#xff0c;又叫主机板、系统板和母板&#xff1b;它安装在机箱内&#xff0c;是微机最基本的也是最重要的部件之一。 主板一般为矩形电路板&#xff0c;上面安装了组成计算机的主…

360桌面计算机,360桌面管理软件

360桌面管理是从360安全卫士中单独提取出来&#xff0c;让你无需安装360安全卫士就能快速使用桌面助手整理自己的桌面。【功能特色】1、一键整理桌面&#xff0c;眨眼之间变清爽360桌面助手采用收纳盒进行分类管理&#xff0c;支持一键整理电脑桌面&#xff0c;用户只要点击“桌…

基于51的串行通讯原理及协议详解(uart)

串行与并行通讯方式 并行&#xff1a;控制简单&#xff0c;传输速度快。线多&#xff0c;长距离成本较高且同时接受困难。 串行&#xff1a;将数据字节分成一位一位的行驶在一条传输线上进行传输。如图&#xff1a; 同步与异步串行通讯方式 同步串行通讯方式&#xff1a;同步…

计算机四级考试题数据库,计算机四级考试《数据库系统工程师》试题及答案

计算机四级考试《数据库系统工程师》试题及答案计算机四级备考工作正在火热进行中&#xff0c;为帮助考生们更好地复习备考&#xff0c;以下是百分网小编搜索整理的一份计算机四级考试《数据库系统工程师》试题及答案&#xff0c;供参考练习&#xff0c;预祝考生们考出自己理想…

Java生鲜电商平台-团购模块设计与架构

Java生鲜电商平台-团购模块设计与架构 说明&#xff1a;任何一个电商系统中&#xff0c;对于促销这块是必不可少的&#xff0c;毕竟这块是最吸引用户的&#xff0c;用户也是最爱的模块之一&#xff0c;理由很简单&#xff0c;便宜。 我的经验是无论是大的餐饮点还是小的餐饮店&…

合肥特殊教育中专学校计算机,安徽省特殊教育中专学校

安徽省特殊教育中专学校办学介绍安徽省特殊教育中专学校隶属于安徽省残疾人联合会,是全省唯一一所残健融合、培养残疾人及残疾人事业服务人才的省级职业院校&#xff0c;是国家残疾人职业培训基地、教育部和中国残联特殊艺术人才培养基地,主要招收听力、视力、肢体残疾学生和有…

二层环路保护,RRPP多环的配置

作者:邓聪聪 组网需求&#xff1a; 局域网中&#xff0c;由A/B/C/D构成RRPP域1换网络结构&#xff0c;要求环网机构中的任意两条线路中断都不能影响业务。 配置思路&#xff1a; 环路由两部分组成&#xff0c;ring1、ring2&#xff0c;B为环1的主节点&#xff0c;G0/0/2为主端口…

如图所示是一种轧钢计算机控制系统,高速线材厂轧钢工艺培训(活套)

原标题&#xff1a;高速线材厂轧钢工艺培训(活套)活套现代高速线材轧机为保证产品尺寸精度&#xff0c;采用微张力及无张力轧制&#xff0c;以消除轧制过程中各种动态干扰引起的张力波动和由此引起的轧件尺寸波动。由于精轧机组为集体传动&#xff0c;故精轧采用微张力轧制&…

计算机网络基础实训精品课,《计算机网络技术》精品课程建设总结报告【荐】.doc...

《计算机网络技术》精品课程建设总结报告【荐】.doc《计算机网络技术》精品课程建设总结报告一、课程定位及历史沿革《计算机网络技术》课程是计算机网络技术专业的主干课&#xff0c;是一门应用性较强的专业基础课&#xff0c;在网络技术专业的整个课程体系中&#xff0c;占有…