我的环境:Windows 8.1,NodeJS 0.10.0请求2.30.0
这是我根据Amazon SDK的样本和requestjs的文档
尝试的var params = {Bucket:'myprivateuniquebucket'
,Key:'mykey'
,Expires: 60};
var url = s3.getSignedUrl('putObject', params);
fs.createReadStream('pic.png').pipe(request.put(url));
这是我得到的错误
events.js:72
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at errnoException (net.js:863:11)
at TCP.onread (net.js:524:19)
然而,当我使用fs.readFile时,不是使用fs.createReadStream,而是一切都运行得很好
fs.readFile('pic.png', function (err, data) {
request(
{ method: 'PUT'
, uri: url
, body: data
}
, function (error, response, body) {
}
);
});
注意我几乎逐字地遵循了流媒体示例https://github.com/mikeal/request。
由于我想在多个地方使用流媒体,因此我非常感谢有关错误的指示。
答案 0 :(得分:1)
这主要是亚马逊的API而不是您的代码的问题。将文件上载到Amazon需要设置Content-Length
标头。在您的流示例中,长度未知,因此Amazon正在删除连接。在第二个示例中,request
知道缓冲区的长度并为您设置Content-Length
。
如果您因为文件很大而流式传输并将其全部加载到RAM中很困难,那么您将需要使用Amazon的多部分上传API。如果你是流媒体但文件很小,那么我可能会坚持使用readFile
方法。