2015-10-05 9 views
0

我开始使用foreach循环列出S3桶的内容。S3桶内容直到最后才上市

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

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

我应该怎么做才能列出它们?

回答

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

如果使用相同的库。

+1

亚马逊限制其对最大1000个对象的响应,如文档中所述。 $ maxkey的更高值在这里不起作用。 – itinance

+0

谢谢澄清。我编辑了一个答案。 –

1

正如S3 developer documentation说:

如水桶可以包含按键几乎无限数量,清单查询的 完整的结果可能会非常大。要管理 较大的结果集,Amazon S3 API支持分页将它们拆分为 多个响应。每个列表键响应都会返回一个高达 1,000个键的页面,并带有一个指示符,指示响应是否被截断。 您发送一系列列表密钥请求,直到您收到所有密钥 。 AWS SDK包装库提供相同的分页。

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

如果您使用的优惠为“getBucket” - 方法的实施,将有一个可选的参数$标记。在此放置最后一个对象的关键点,以检索该对象后面的下一个1000个对象。

文档:

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

+0

这是我的S3库文件中的方法。 [public static function getBucket($ bucket,$ prefix = null,$ marker = null,$ maxKeys = null)]。我应该做什么改变? –

+1

随着您的第一次请求,您将获得1000个对象密钥。取最后一个,并将其作为$ marker的参数传递给第二个请求以检索接下来的1000个(最大)对象 – itinance

+0

我对此完全陌生。你可以编辑上面的代码@ itinance –

相关问题