首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NodeJS中将文件二进制数据流发送到HTTPS请求(无快件)

在NodeJS中将文件二进制数据流发送到HTTPS请求(无快件)
EN

Stack Overflow用户
提问于 2017-02-08 02:03:00
回答 2查看 2.4K关注 0票数 0

我试图通过使用.exe的NodeJS脚本将一个文件( GitHub安装程序)上传到一个GitHub发布API版本中。医生说我的文件必须在POST请求的正文中以原始二进制格式发送。我的安装程序超过30 MB,所以我想我必须要流它。

我不能使用外部NPM依赖项,比如Express或Request,所以我尝试使用内置的HTTPS模块来实现这一点。我正努力让它发挥作用。

以下是我所尝试的:

代码语言:javascript
复制
// (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模块,所以请注意,接受的答案并不反映出原来的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-08 02:31:58

我认为使用外部模块是可以的。我使用请求将数据流到另一台服务器。看看这个片段:

代码语言:javascript
复制
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'});
票数 1
EN

Stack Overflow用户

发布于 2017-02-08 02:21:15

我认为:protocol: "https:"中导致您的400坏请求http响应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42103423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档