node代理下载的问题
我有一个做下载的操作,但因需求,需要先经过node做一次转发再请求到远程服务。我的代码如下:
var http = require("http");
var querystring = require("querystring");
var url = require('url');
var proxyconfig = require("../config/proxy");
exports.ajax = function (req, res) {
var ajaxUrl = req.body.url;
var ajaxType = req.body.type;
var ajaxData = req.body.data || "";
var ajaxContentType = (req.body.contentType || "application/x-www-form-urlencoded") +"; charset=utf-8";
var urlObj = {
hostname: proxyconfig.hostname,
port: proxyconfig.port,
path: ajaxUrl
};
if(ajaxUrl.indexOf("http") >= 0){
urlObj = url.parse(ajaxUrl);
}
var options = {
hostname: urlObj.hostname,
port: urlObj.port,
path: urlObj.path,
method: ajaxType,
headers: {
'Content-Type': ajaxContentType,
'Content-Length': Buffer.byteLength(ajaxData, 'utf8')
}
};
var ajaxReq = http.request(options, function (ajaxRes) {
ajaxRes.setEncoding('utf8');
ajaxRes.pipe(res);
});
ajaxReq.on('error', function (e) {
console.log('problem with request: ' + e.message);
res.json({
ok: false,
msg: "请求数据异常!",
extmsg: e.message
});
});
if(ajaxData){
ajaxReq.write(ajaxData);
}
ajaxReq.end();
};
但是现在的问题是,我在浏览器做了下载请求后,只能获取一个乱码的文件,而无法得到正确的文件。请问怎么处理这个问题?
5 回复
是文件名乱码还是什么乱码?
来自炫酷的 CNodeMD 越来越喜欢material design😁
@XGHeaven 第一个是文件没有名字和后缀的,比如我请求得url是/a,下载的文件默认就是a,正常的直接请求后端下载是有名字和后缀(我下载的是xls文件)的。然后我把下载的文件用excel打开,里面是乱码。换了各种版本都是乱码。
修改如下代码就可以了,好郁闷:
var ajaxReq = http.request(options, function (ajaxRes) {
res.writeHead(ajaxRes.statusCode, ajaxRes.headers);
ajaxRes.pipe(res);
});
有文件下载时,不能添加
ajaxRes.setEncoding('utf8');
同时需要把ajaxRes的headers给复制回来!