gpt4 book ai didi

node.js - nodejs - 使用 fs.createReadStream、requestjs、流式传输和 AWS S3 预签名 url 上传会引发错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:16 24 4
gpt4 key购买 nike

我的环境: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几乎逐字逐句。

由于我想在多个地方使用流式传输,因此我希望能指出错误之处。

最佳答案

这主要是亚马逊 API 的问题,而不是您的代码的问题。将文件上传到 Amazon 需要设置 Content-Length header 。在您的流示例中,长度未知,因此亚马逊只是断开连接。在第二个示例中,request 知道缓冲区的长度并为您设置Content-Length

如果您正在进行流式传输,因为文件很大并且很难将其全部加载到 RAM 中,那么您将需要使用 Amazon 的分段上传 API。如果您正在流式传输但文件很小,那么我可能会坚持使用 readFile 方法。

关于node.js - nodejs - 使用 fs.createReadStream、requestjs、流式传输和 AWS S3 预签名 url 上传会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22738383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com