将二进制数据PUT到远程服务器

时间:2014-01-29 19:14:38

标签: node.js

我要做的是将此curl命令转换为Node.js代码

curl -X PUT -H "Content-Type:" --data-binary @slug.tgz "https://s3-external-1.amazonaws.com/herokuslugs/heroku.com/v1/xyz"

我一直在摆弄Node的内置https.requestrequest lib超过一个小时,但仍然没有想到这一点。

3 个答案:

答案 0 :(得分:5)

我之前遇到过这个问题。我通过从fs.createReadStream更改为fs.readFile来完成工作。这是我所做的快速示例。

fs.readFile('@slug.tgz', function (err, data) {
  if (err) return console.error(err);

  options = {
    url: 'https://s3-external-1.amazonaws.com/herokuslugs/heroku.com/v1/xyz',
    body: data
  }

  request.put(options, function (err, message, data) {
    if (err) return console.error(err);

    console.log(data)
  });
});

当我使用fs.createReadStream时,我收到了来自亚马逊的错误。另外,请确保首先通过platfrom API创建一个slug,然后在响应中使用博客中的url

答案 1 :(得分:0)

curl -X PUT -H "Content-Type:" --data-binary @slug.tgz "https://s3-external-1.amazonaws.com/herokuslugs/heroku.com/v1/xyz"

我不肯定这是有效的,但这是我首先尝试的(the third example in the request docs):

fs.createReadStream('@slug.tgz').pipe(request.put('https://s3-external-1.amazonaws.com/herokuslugs/heroku.com/v1/xyz'))

您可能还想使用我在official node library中展示的亚马逊this answer

答案 2 :(得分:0)

以下代码适用于我

var options = {
        url: <url>,
        method: "PUT",
    };

    fs.createReadStream(file_path).pipe(
        request(options, (err, response) => {
            console.log(response.statusCode);
            var body = JSON.parse(response.body);
        })
    )