7

在 Amazon S3 中调用 ListObjects 时,我一直认为有 1,000 个键的限制。然而,我刚刚打了一个电话,结果是 1,080。但即使是他们的文档也说有 1,000 个限制。

我尝试将 MaxKeys 设置为 1,000,但仍会得到 1,080 个结果。我的代码:

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

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

两个问题:

  1. 我的代码错了吗?
  2. 亚马逊是否取消了 1000 键限制?有新的限制吗?

提前致谢!

4

3 回答 3

11

S3 API 限制没有改变,它仍然限制为最多 1000 个键/响应。

使用 PHP SDK v1,单个请求最多返回 1000 个密钥,而要获得其余的密钥,您需要使用该marker选项进行第二次请求。

新的 PHP SDK (v2) 有一个迭代器的概念,它抽象了执行这些多个连续请求的过程。这使得获取所有对象变得更加容易。

于 2013-08-29T14:17:45.927 回答
1

默认情况下,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());
于 2020-07-14T06:16:54.497 回答
0

AWS s3 最多提供 1000 个文件列表,以便获得超过 1000 个文件以使用此方法

对于 javascript 使用这种方法

https://stackoverflow.com/a/69754448/8239116

于 2021-10-28T13:02:08.023 回答