Yuandupier

Yuandupier

Amazon S3获取指定桶中所有对象列表

44
0
0
2022-12-30

背景

项目中使用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