获取对象列表

您可以使用 listObjects 接口列举对象,每次最多返回1000个对象,以下代码展示如何简单获取对象列表:

String bucketName = "<your-bucket-name>";
ObjectListing ol = s3.listObjects(bucketName);
List<S3ObjectSummary> objects = ol.getObjectSummaries();
for (S3ObjectSummary os: objects) {
    System.out.println("* " + os.getKey());
}

如果 list 大于1000,则返回的结果中 isTruncated 为true,通过返回的 NextMarker 标记可以作为下次读取的起点。列举所有对象示例代码如下:

String nextMarker = null;
ObjectListing objectListing;
do {
    ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
    listObjectsRequest.withBucketName(bucketName).withMarker(nextMarker);
    objectListing  = s3.listObjects(listObjectsRequest);
    for (S3ObjectSummary s3ObjectSummary: objectListing.getObjectSummaries()) {
       System.out.println(s3ObjectSummary.getKey());
   }
    nextMarker = objectListing.getNextMarker();
} while (objectListing.isTruncated());

ListObjectsRequest 中可设置的参数如下:

参数 说明
BucketName 设置桶名称。
EncodingType 用于设置返回对象的字符编码类型。
Marker 指定列出对象读取对象的起点。
MaxKeys 设置response中返回对象的数量,默认值和最大值均为1000。
Prefix 限定列举 objectKey 匹配前缀 prefix 的对象。
Delimiter 用于对对象 objectKey 进行分组的字符。所有名字包含指定的prefix(可以不指定)且第一次出现 delimiter 字符之间的对象作为一组返回对象。
RequestPayer 确认请求者知道将为操作付费。桶的所有者不需要在请求中指定这个参数。