S3存储桶内容直到最后才被列出

时间:2015-10-05 09:28:13

标签: php foreach amazon-s3

我开始使用foreach循环列出S3存储桶的内容。

$contents = $s3->getBucket("bucket-name");
foreach($contents as $value) 
    {
      print $value['name']; echo "<br>"; 
    }

但问题是它没有列出1000以上的索引。最后几个文件没有列出。 我试着获取数组的长度,我发现最后几个文件甚至没有存储在该数组中。

我应该怎么做才能列出所有这些?

2 个答案:

答案 0 :(得分:1)

S3 developer documentation中所述:

  

由于存储桶可以包含几乎无限数量的密钥,因此   列表查询的完整结果可能非常大。管理   大型结果集,Amazon S3 API支持将它们分割成分页   多重回复。每个列表键响应返回一页最多   带有指示符的1,000个键,指示响应是否被截断。   您发送了一系列列表键请求,直到您收到所有请求   按键。 AWS SDK包装器库提供相同的分页。

这意味着您需要多页请求来迭代多个“页面”。这取决于你的“s3”类的实现。你在s3使用哪个库?

如果您使用的实现提供“getBucket” -Method,则会有一个可选参数 $ marker 。在此处放置最后一个对象的键,以检索该对象之后的下一个1000个对象。

文档:

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html

答案 1 :(得分:0)

列出的文件的默认数量设置为1000,这就是为什么你不能获得超过1000个文件的原因:

这里有一个函数的描述:

public static function getBucket($bucket, $prefix = null, $marker = null, $maxKeys = null, $delimiter = null) {

使用$marker设置开始获取文件的位置,并设置$maxKeys作为限制。

WWW:http://www.drupalcontrib.org/api/drupal/contributions!media_mover!contrib!mm_s3!S3.php/function/S3%3A%3AgetBucket/6

如果您使用相同的库。