我一直认为在Amazon S3中调用ListObjects时有1000个键限制。但是,我刚刚拨打电话,它正在拉动1,080。但即便他们docs也说有限制为1000。
我尝试将MaxKeys设置为1,000但仍然可以获得1,080个结果。我的代码:
$iterator = $s3->getIterator('ListObjects', array(
'Bucket' => 'BUCKETNAME',
'MaxKeys' => 1000
));
然而,它将文件夹作为键。但我当然没有80个。
两个问题:
提前致谢!
答案 0 :(得分:10)
S3 API限制没有改变,它仍然限制为最多1000个键/响应。
使用PHP SDK v1,单个请求最多返回1000个密钥,然后您需要使用marker
选项执行第二个请求。
新的PHP SDK(v2)有一个迭代器的概念,它抽象了执行这些多个连续请求的过程。这样可以更轻松地获取所有对象。
答案 1 :(得分:0)
默认情况下,API最多返回1,000个键名。响应可能包含更少的键,但永远不会包含更多。更好的实现方式是使用更新的ListObjectsV2 API:
List<S3ObjectSummary> docList=new ArrayList<>();
ListObjectsV2Request req = new ListObjectsV2Request().withBucketName(bucketName).withPrefix(folderFullPath);
ListObjectsV2Result listing;
do{
listing=this.getAmazonS3Client().listObjectsV2(req);
docList.addAll(listing.getObjectSummaries());
String token = listing.getNextContinuationToken();
req.setContinuationToken(token);
LOG.info("Next Continuation Token for listing documents is :"+token);
}while (listing.isTruncated());