Amazon web services 从S3桶中抓取物品
所以我想得到S3存储桶中所有对象的列表。我刚刚把它放在了一个快速路线应用程序中,我很快就设置好了(在快速路线中,这并不重要,只是我觉得舒服而已) 所以我在做:Amazon web services 从S3桶中抓取物品,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,所以我想得到S3存储桶中所有对象的列表。我刚刚把它放在了一个快速路线应用程序中,我很快就设置好了(在快速路线中,这并不重要,只是我觉得舒服而已) 所以我在做: var allObjs = []; s3.listObjects({Bucket: 'myBucket'}, function(err, data) { var stringifiedObjs = JSON.stringify(allObjs); fs.writeFile("test", string
var allObjs = [];
s3.listObjects({Bucket: 'myBucket'}, function(err, data) {
var stringifiedObjs = JSON.stringify(allObjs);
fs.writeFile("test", stringifiedObjs, function(err) {})
}
它抓取我的对象,对它们进行字符串化,并将它们写入一个名为test的文件。我遇到的问题是,它只得到1000个结果
我在某个地方读到(我找不到)AWS将每次通话的结果限制在1000个以内
我怎样才能重新运行它并获取下一个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' } },
您需要将
标记
属性设置为上一个get的最后一个元素
检查文档作为参考(正如您已经做的那样:))
您需要将
标记
属性设置为上一个get的最后一个元素
检查文档作为参考(正如您已经做的那样:))
当您收到来自
listObjects
调用的响应时,您的响应应该包括数据
属性中的两个非常重要的字段:
-如果有更多键要返回,则为True。否则就错了IsTruncated
-下一次调用NextMarker
时用于listObjects
属性的值Marker
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);
});
来源:当您收到来自
listObjects
调用的响应时,您的响应应该包括数据
属性中的两个非常重要的字段:
-如果有更多键要返回,则为True。否则就错了IsTruncated
-下一次调用NextMarker
时用于listObjects
属性的值Marker
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);
});
来源:干杯!我看了一眼,我的眼睛是全新的,所以我有点迷路了。当我设置标记时,你的意思是,标记将是我从上次结果中得到的最后一个对象吗?它是一个键,所以你应该将它设置为最后一个对象的键(通常是文件名)。您可以查看单个对象的属性列表并找到
键
属性。您可以在此处看到响应示例。每个内容都有一个类似于我的第三幅图像的键。jpg
@Piertro I更新了我的问题。因此,我将多个对象重新包装在[]
中,如果我通过key
作为标记,这将是我所有对象中的最后一个key
?quick&dirty->var lastKey=objects[objects.length-1]。干杯!我看了一眼,我的眼睛是全新的,所以我有点迷路了。当我设置标记时,你的意思是,标记将是我从上次结果中得到的最后一个对象吗?它是一个键,所以你应该将它设置为最后一个对象的键(通常是文件名)。您可以查看单个对象的属性列表并找到键
属性。您可以在此处看到响应示例。每个内容都有一个类似于我的第三幅图像的键。jpg
@Piertro I更新了我的问题。因此,我将多个对象重新包装在[]
中,如果我将键作为标记传递,这将是我所有对象中的最后一个键吗?quick&dirty->var lastKey=objects[objects.length-1]。键{IsTruncated:true,标记:“”,内容:[{myObjects}],Name:'myBucket',前缀:“”,MaxKeys:1000,CommonPrefixes:[]}
这是我得到的响应。。我也没有NextMarker
来自忽略我之前的评论的电话,干杯!这管用!您提到的.eachPage
实际上会自动为您添加标记。Sweet:D{IsTruncated:true,标记:“”,内容:[{myObjects}],名称:“myBucket”,前缀:“”,MaxKeys:1000,CommonPrefixes:[]}
这是我得到的响应。。我也没有NextMarker
来自忽略我之前的评论的电话,干杯!这管用!您提到的.eachPage
实际上会自动为您添加标记。甜心:D