S3桶的内容直到最后才列出


S3 bucket content is not getting listed till last

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

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

但问题是它没有列出超过1000个索引。最后几个文件没有列出。我试着得到数组的长度,我发现最后几个文件甚至没有被存储在那个数组中。

我该怎么把它们都列出来呢?

如S3开发人员文档中所述:

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

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

如果你正在使用的实现提供了"getBucket"-方法,将有一个可选参数$marker。在这里放置最后一个对象的键,以检索该对象之后的1000个对象。

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

列出的文件的默认数量被设置为1000,所以这就是为什么你不能得到超过1000个文件:

这里有一个函数的描述:

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

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