我试图通过使用.exe的NodeJS脚本将一个文件( GitHub安装程序)上传到一个GitHub发布API版本中。医生说我的文件必须在POST请求的正文中以原始二进制格式发送。我的安装程序超过30 MB,所以我想我必须要流它。
我不能使用外部NPM依赖项,比如Express或Request,所以我尝试使用内置的HTTPS模块来实现这一点。我正努力让它发挥作用。
以下是我所尝试的:
// (URL below has proper values in my code)
var fullUploadUrl = url.parse("https://uploads.github.com/repos/[org]/[repo]/releases/[release id]/assets?name=myFile.exe&access_token=[GitHub access token]");
var uploadRequest = https.request({
headers: { "Content-Type": "application/octet-stream" },
method: "POST",
protocol: "https:",
hostname: fullUploadUrl.hostname,
path: fullUploadUrl.path
}, (res) => {
if (res.statusCode !== 201) {
// Error
} else {
// Success
}
});
var readStream = fs.createReadStream(uploadAssetPath);
// readStream.on("end", () => { // I have also tried with this uncommented
// uploadRequest.end();
// });
readStream.pipe(uploadRequest);这将导致立即生成400个状态代码。
将二进制数据流到HTTPS POST请求的正确方法是什么?有没有人有一个例子,说明如何在没有外部NPM依赖的情况下,以编程方式将大型资产上传到GitHub环境中的NodeJS发行版?
编辑:我们最终使用了外部request模块,所以请注意,接受的答案并不反映出原来的问题。
发布于 2017-02-08 02:31:58
我认为使用外部模块是可以的。我使用请求将数据流到另一台服务器。看看这个片段:
var r = request.post('http://service.com/upload', function optionalCallback(err, httpResponse, body) {...})
var form = r.form();
form.append('my_field', 'my_value');
form.append('my_buffer', new Buffer([1, 2, 3]));
form.append('custom_file', fs.createReadStream(__dirname + '/unicycle.jpg'), {filename: 'unicycle.jpg'});发布于 2017-02-08 02:21:15
我认为:在protocol: "https:"中导致您的400坏请求http响应。
https://stackoverflow.com/questions/42103423
复制相似问题