Amazon S3获取指定桶中所有对象列表
编辑背景
项目中使用Amazon S3对象存储的时候遇到一个问题,需要列出指定桶中的所有对象列表,但是参考官方文档,使用listObjects方法一次最多只能输出1000个对象。
解决方法
Google了一下,找到了下面的解决方案,亲测可以使用。
项目使用的是Java的SDK,maven坐标如下:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.261</version>
</dependency>
具体代码:
public static void main(String[] args) {
AmazonS3 s3client = AmazonS3ClientBuilder
.standard()
.withCredentials()
.withEndpointConfiguration()
.build();
List<S3ObjectSummary> s3ObjectSummaries = new ArrayList<>();
ListObjectsV2Request listObjectsRequest = new ListObjectsV2Request()
.withBucketName("bucketName")
.withPrefix("prefix");
ListObjectsV2Result listing;
do {
listing = s3client.listObjectsV2(listObjectsRequest);
s3ObjectSummaries.addAll(listing.getObjectSummaries());
String token = listing.getNextContinuationToken();
listObjectsRequest.setContinuationToken(token);
} while (listing.isTruncated());
System.out.println("all objects size is " + s3ObjectSummaries.size());
}
执行代码,执行结果正确:
参考
https://stackoverflow.com/questions/8027265/how-to-list-all-aws-s3-objects-in-a-bucket-using-java
https://docs.amazonaws.cn/en_us/AmazonS3/latest/API/API_ListObjects.html