如何用express 和 request 转发带文件请求
发布于 9 年前 作者 LiuWenLibra 16934 次预览 最后一次回复是 9 年前 来自 问答
场景是express接收到req中的文件后需要将文件转发至远端接口
var
express = require('express'),
request = require('request'),
multer = require('multer'),
upload = multer({ dest: 'uploads/' }),
Q = require('q'),
app=express();
app.post('/sapi/servlet/fileupload', upload.single('file'), function (req, res, next) {
console.log(req.file);
var reqParam = {
method:req.method,
url: 'http://xxx.xxx.xxx/upload',
qs: req.query,
body: req.body,
headers: {
},
json: true
};
var deferred = Q.defer();
request(reqParam, function (err, res, body) {
if (err) {
return deferred.reject(new ServiceReqError('ServiceRequestError', 500, err));
}
if(res){
if (res.statusCode && (res.statusCode !== 200 || !body)) {
return deferred.reject(new ServiceReqError('ServiceRequestError', res.statusCode, body || 'error'));
}
}
if(body){
//if (body.statusCode && (body.statusCode !== '200' || body.result !== 'true')){
// return deferred.reject(new ServiceReqError('ServiceRequestError', body.message || '服务器离家出走'));
//}
}
//console.log(res.headers);
deferred.resolve([body,res]);
});
return deferred.promise;
});
7 回复
request是个牛b的模块,我觉得最容易想到的办法就是构造request的form,转发之。能利用stream最好了@DevinXian stream如何将req.file转为流传入reqParam 中?
@LiuWenLibra req.file不是blob一类的,要读取上传的文件吧
@DevinXian 我这样写为什么远端还是接不到文件?
不要使用 multer 接收, 直接 Pipe 即可
request 可能是这样 pipe 的. superagent 是这样的
http://stackoverflow.com/questions/25344879/uploading-file-using-post-request-in-node-js