listObjects()并未提供s3中存储桶中对象的完整列表

bac*_*shN 1 java amazon-s3 amazon-web-services

我正在尝试从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());
Run Code Online (Sandbox Code Playgroud)

但这只是打印一些commonPrefixes。有超过2000个前缀,但仅打印950。如何获得所有前缀?

Mar*_*k B 5

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