【问题标题】:listObjects() doesnt give full list of objects in a bucket in s3listObjects() 没有给出 s3 中存储桶中对象的完整列表
【发布时间】:2017-09-07 21:25:03
【问题描述】:

我正在尝试从 amazon s3 获取存储桶的 commonPrefixes。我正在使用以下代码来获取所有对象的列表:

ObjectListing listing = s3Client.listObjects(new ListObjectsRequest().withBucketName(bucket).withPrefix("used/").withDelimiter("/"));
for (String name : listing.getCommonPrefixes()) 
{
    System.out.println(name);
    objectNames.add(name);
}
System.out.println("\n\n\nSize: " + objectNames.size());

但它只是打印一些常见的前缀。有2000多个前缀,但它只打印950。我怎样才能得到所有的前缀?

【问题讨论】:

  • 你的意思是 objectNames.size() > 2000 但只打印了 950 行?
  • 不,该存储桶中有超过 2000 个键,但 getCommonPrefixes() 仅提供 950 个键。

标签: java amazon-web-services amazon-s3


【解决方案1】:

您的ObjectListing 一次最多只能包含 1000 个对象。当您调用 getCommonPrefixes 时,它只返回这 1000 个对象的公共前缀。您需要检查 ObjectListing 的 isTruncated() 方法以确定是否还有更多记录,然后使用 getNextMarker() 方法以及随后的 listObjects 调用来获取剩余的对象记录,以及这些对象的公共前缀。

【讨论】:

  • 将代码包装在while (listing.isTruncated()) 中完成了任务。而listing = s3Client.listNextBatchOfObjects(listing) 带来了接下来的 1000 个前缀。
猜你喜欢
  • 2015-10-23
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 2016-12-11
  • 1970-01-01
  • 2020-07-14
  • 2016-02-07
相关资源
最近更新 更多