我开始使用foreach循环列出S3存储桶的内容。
$contents = $s3->getBucket("bucket-name");
foreach($contents as $value)
{
print $value['name']; echo "<br>";
}
但问题是它没有列出1000以上的索引。最后几个文件没有列出。 我试着获取数组的长度,我发现最后几个文件甚至没有存储在该数组中。
我应该怎么做才能列出所有这些?
答案 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
作为限制。
如果您使用相同的库。