所以我想获得S3存储桶中所有对象的列表。我只是把它放在快速设置的快速路线应用程序中(并不是真的很重要,只是我很满意)。
所以我在做:
var allObjs = [];
s3.listObjects({Bucket: 'myBucket'}, function(err, data) {
var stringifiedObjs = JSON.stringify(allObjs);
fs.writeFile("test", stringifiedObjs, function(err) {})
}
抓取我的对象,将它们串起来并将它们写入名为test的文件中。我遇到的问题是它只获得1,000个结果。
我在某个地方(我找不到哪里)将AWS限制为每次调用1,000个结果。
我怎样才能重新运行并抓住下一个1000?但是,确保它是下一个递增的1000而不是第一个?
简而言之,我怎样才能获得S3存储桶中的每个对象?我一直迷失在文档中。
谢谢!
修改
这是我回来的对象:
{ Key: 'bucket_path/e11_19_9a31mv3ot51tm384grjd6rdj51boxx_q_q112.png',
LastModified: Sat Apr 23 2016 09:16:23 GMT+0100 (BST),
ETag: '"7d50fsdfsd4sda159b32cf85c683c5924"',
Size: 704222,
StorageClass: 'STANDARD',
Owner:
{ DisplayName: 'servers',
ID: '58af203151c51eddf2sdfs411e0b91d274a8fda23f58280f9b06371e436f7' } },
答案 0 :(得分:3)
您需要将marker
属性设置为上一个get
检查文档作为参考(正如您已经做过的那样:))
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html
答案 1 :(得分:1)
当您收到listObjects
来电时的回复时,您的回复应包含data
属性中的2个非常重要的字段:
IsTruncated
- 如果有更多键要返回,则为真。否则就错了。NextMarker
- 下次调用Marker
时用于listObjects
媒体资源的值。因此,在致电listObjects
后,您需要检查IsTruncated
字段,看看它是否为True
。如果是,请将NextMarker
的值提供给Marker
的值,然后再次调用listObjects
。
<强>更新强>
AWS.Request
对象似乎有.eachPage
方法可用于自动进行多次调用。所以有一个神奇的功能为你做这项工作。
var pages = 1;
s3.listObjects().eachPage(function(err, data) {
if (err) return;
console.log("Page", pages++);
console.log(data);
});
来源:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html