调用ListObjects时,Amazon S3是否对MaxKeys有限制?

时间:2013-08-29 13:34:34

标签: amazon-s3

我一直认为在Amazon S3中调用ListObjects时有1000个键限制。但是,我刚刚拨打电话,它正在拉动1,080。但即便他们docs也说有限制为1000。

我尝试将MaxKeys设置为1,000但仍然可以获得1,080个结果。我的代码:

$iterator = $s3->getIterator('ListObjects', array(
    'Bucket' => 'BUCKETNAME',
    'MaxKeys' => 1000
));

然而,它将文件夹作为键。但我当然没有80个。

两个问题:

  1. 我的代码错了吗?
  2. 亚马逊是否解除了1000关键限制?是否有新的限制?
  3. 提前致谢!

2 个答案:

答案 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());