Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 从S3桶中抓取物品_Amazon Web Services_Amazon S3 - Fatal编程技术网

Amazon web services 从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

所以我想得到S3存储桶中所有对象的列表。我刚刚把它放在了一个快速路线应用程序中,我很快就设置好了(在快速路线中,这并不重要,只是我觉得舒服而已)

所以我在做:

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
调用的响应时,您的响应应该包括
数据
属性中的两个非常重要的字段:

  • IsTruncated
    -如果有更多键要返回,则为True。否则就错了
  • 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
调用的响应时,您的响应应该包括
数据
属性中的两个非常重要的字段:

  • IsTruncated
    -如果有更多键要返回,则为True。否则就错了
  • 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