我开始使用foreach循环列出S3桶的内容。S3桶内容直到最后才上市
$contents = $s3->getBucket("bucket-name");
foreach($contents as $value)
{
print $value['name']; echo "<br>";
}
但问题是它没有列出1000以上的索引。最后几个文件没有列出。 我试图获取数组的长度,我发现最后几个文件甚至没有存储在该数组中。
我应该怎么做才能列出它们?
我开始使用foreach循环列出S3桶的内容。S3桶内容直到最后才上市
$contents = $s3->getBucket("bucket-name");
foreach($contents as $value)
{
print $value['name']; echo "<br>";
}
但问题是它没有列出1000以上的索引。最后几个文件没有列出。 我试图获取数组的长度,我发现最后几个文件甚至没有存储在该数组中。
我应该怎么做才能列出它们?
上市文件的默认数量设置为1000,所以这就是为什么你不能获得超过1000个文件:
在这里,你有一个函数的说明:
public static function getBucket($bucket, $prefix = null, $marker = null, $maxKeys = null, $delimiter = null) {
使用$marker
设置从哪里开始获取文件和$maxKeys
作为限制。
如果使用相同的库。
正如S3 developer documentation说:
如水桶可以包含按键几乎无限数量,清单查询的 完整的结果可能会非常大。要管理 较大的结果集,Amazon S3 API支持分页将它们拆分为 多个响应。每个列表键响应都会返回一个高达 1,000个键的页面,并带有一个指示符,指示响应是否被截断。 您发送一系列列表密钥请求,直到您收到所有密钥 。 AWS SDK包装库提供相同的分页。
这意味着您需要多页面请求来遍历多个“页面”。这将取决于你的“s3”类的实现。你在使用s3的库有哪些?
如果您使用的优惠为“getBucket” - 方法的实施,将有一个可选的参数$标记。在此放置最后一个对象的关键点,以检索该对象后面的下一个1000个对象。
文档:
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html
这是我的S3库文件中的方法。 [public static function getBucket($ bucket,$ prefix = null,$ marker = null,$ maxKeys = null)]。我应该做什么改变? –
随着您的第一次请求,您将获得1000个对象密钥。取最后一个,并将其作为$ marker的参数传递给第二个请求以检索接下来的1000个(最大)对象 – itinance
我对此完全陌生。你可以编辑上面的代码@ itinance –
亚马逊限制其对最大1000个对象的响应,如文档中所述。 $ maxkey的更高值在这里不起作用。 – itinance
谢谢澄清。我编辑了一个答案。 –