我在项目中使用Angularjs和nodejs并处理文件上传。我想以安全的方式将post请求发送到url端点,因为我需要将accesstoken与请求相关联。所以我这样做的方式是,我添加了从UI中选择文件的指令,一旦获取文件,我就在控制器中使用FormData()这样附加它
var fd = new FormData();
fd.append('file',myFile);
并将此formdata对象发送到nodejs服务器,如此处所述http://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs
期望此请求将从我那里转到我的nodejs服务器URL我将向外部Web服务发送另一个帖子请求
$http.post('api/collections/upload',fd, {
transformRequest: angular.identity,
headers: {
'Content-type': undefined
}
});
因此它会在请求中附加正确的内容类型和边界。我在
时获取服务器端nodejs上的文件function(req,res){
console.log(req.files); //I am able to see the file content
}
它被上传到nodejs服务器端。 现在我想使用req.files发出一个post请求到一个不同的端点以及正确的accessToken和headers。尝试过很多东西但却无法满足要求。不确定如何将imagedata / req.files与请求一起附加。我尝试了请求npm模块https://www.npmjs.org/package/request
中提到的这两件事1)
request.post({
url: 'https://www.example.com/uploadImage',
headers: {
'Authorization': <accessToken>,
'Content-type': 'multipart/form-data'
},
body: req.files
});
不知道如何使用此请求附加二进制数据以及如何设置边界。想要使用此请求发送上传的图像时是否需要边界?
2)
fs.createReadStream(req.files.file.path, {encoding: base64}).pipe(request.post({
url: 'https://www.example.com/uploadImage',
headers: {
'Content-type': 'multipart/form-data'
}
}));
有人可以建议我如何使用请求npm模块发送此帖子请求?感谢。
答案 0 :(得分:1)
这里的文档有很多例子可以完全按照你的描述进行:
https://github.com/mikeal/request#streaming
从该链接中可以看出,请求库将.pipe()
方法添加到您的http req
对象中,您应该可以使用该方法比如链接中的例子:
function(req, res) {
req.pipe(request.post('https://www.example.com/uploadImage');
}
或类似的东西。
你几乎在那里进行了#2尝试,但只有先前将文件写入磁盘并使用fs.createReadStream()
答案 1 :(得分:1)
你的建议帮助我了解我的尝试是对的。另一篇解决我问题的文章是http://aguacatelang.wordpress.com/2013/01/05/post-photo-from-node-js-to-facebook/。基本上,这就是我所做的并且有效。谢谢你的建议。
var form = new FormData();
form.append('file', fs.createReadStream(__dirname + '/image.jpg'));
var options = {
url: 'https://www.example.com/uploadImage?access_token='+ <accesstoken>,
headers: form.getHeaders()
};
form.pipe(request.post(options,function(err,res){
if(err){
log.debug(err);
}
else {
log.debug(res);
}
}));