【问题标题】:Request.post on already uploaded image fileRequest.post 已上传的图片文件
【发布时间】:2014-10-18 04:37:52
【问题描述】:

我在项目中使用 Angularjs 和 nodejs 并处理文件上传。我想以安全的方式将发布请求发送到 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 向不同的端点以及正确的 accessToken 和标头发出一个发布请求。尝试了很多东西,但无法使请求通过。不知道如何将 imagedata/req.files 与请求一起附加。我尝试了 request 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'
    }
  })); 

有人可以就如何使用 request npm 模块发送此帖子请求提出一些想法吗?谢谢。

【问题讨论】:

    标签: javascript node.js angularjs express


    【解决方案1】:

    这里的文档有很多完全按照你的描述做的例子:

    https://github.com/mikeal/request#streaming

    从该链接中可以看出,request 库向您的 http 的 req 对象添加了一个 .pipe() 方法,您应该可以像链接中的示例一样使用它:

    function(req, res) {
      req.pipe(request.post('https://www.example.com/uploadImage');
    }
    

    或类似的东西。

    您的第 2 次尝试就快到了,但这只有在您之前已将文件写入磁盘并使用 fs.createReadStream() 读入时才有效

    【讨论】:

      【解决方案2】:

      您的建议帮助我至少知道我的尝试是正确的。解决我的问题的另一篇文章是 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);
          }
      }));  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-07
        • 2014-10-08
        • 2016-02-04
        • 2018-07-29
        • 2013-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多