这个问题的背后有一个AWS S3 API的限制。AWS S3 API在一次请求中最多只能返回1000个对象。因此需要使用AWS S3提供的分页工具来获取对象。以下是一个使用分页工具获取S3对象的示例代码:
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.*;
S3Client s3client = S3Client.builder().build();
ListObjectsV2Request req = ListObjectsV2Request.builder()
.bucket("my-bucket")
.maxKeys(1000)
.build();
ListObjectsV2Response res;
do {
res = s3client.listObjectsV2(req);
for (S3ObjectSummary objectSummary : res.contents()) {
System.out.printf("Object Key: %s\n", objectSummary.key());
}
String token = res.nextContinuationToken();
req = req.toBuilder()
.continuationToken(token)
.build();
} while (res.isTruncated());
通过使用S3分页工具,我们可以获取超过1000个对象。该示例代码循环调用listObjectsV2,每次最多返回1000个对象,知道所有对象都被获取完毕。