我要做的是将此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.request
和request lib超过一个小时,但仍然没有想到这一点。
答案 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);
})
)