我试图获取()文件并将它们传输到我的s3存储桶,有人可以告诉我我做错了吗?
我的代码:
var client = knox.createClient({
key: 'AAAAAAAAAAAA',
secret: 'BBBBBBBBBBBB',
bucket: 'my-imgs',
});
var elem = list.shift(); // {_id:'filename.jpg', main_img: 'http://example.com/file.jpg'}
request.get(elem.main_img,function(err,res){
var headers = {
'Content-Length': res.headers['content-length'],
'Content-Type': res.headers['content-type'],
'x-amz-acl': 'public-read'
};
console.log(headers) //outputs are ok, error comes after
var req = client.putStream(res, elem._id, headers,function(err,s3res){
if(err) console.log(err);
console.log(s3res);
});
}).on('error', function(err) {
console.log(err)
});
标题对象被正确填充,请求没有任何错误,几秒钟后我得到:
{ [Error: socket hang up] code: 'ECONNRESET' }
我是否必须以特定方式配置我的存储桶以接受传输? 我刚刚通过AWS控制台创建了它,符合美国标准'并且只做了一件事,添加了我认为允许上传的poicy。我觉得这可能是问题,但我不知道如何修复它,我看到的所有教程都已经过时了,请给我一个线索!
政策:
{
"Statement": [
{
"Sid": "allow-public-read",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-imgs/*"
},
{
"Sid": "allow-public-put",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-imgs/*"
}
]
}
答案 0 :(得分:1)
您可以在app.js
中尝试此操作var http = require('http');
//increase the max socket limit
http.globalAgent.maxSockets = 1024;
答案 1 :(得分:0)
上周我在同样的问题上苦苦挣扎。很高兴我找到了解决方案:按照它的工作顺序,你需要结束你的S3请求:
var req = client.putStream(res, elem._id, headers,function(err,s3res){
if(err) console.log(err);
console.log(s3res);
});
req.end();
或者简单地说:
var req = client.putStream(res, elem._id, headers,function(err,s3res){
if(err) console.log(err);
console.log(s3res);
}).end();