从S3存储桶中抓取物品

时间:2016-04-26 10:56:28

标签: amazon-web-services amazon-s3

所以我想获得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' } },

2 个答案:

答案 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