迭代和检索Amazon S3中所有对象的元数据

nis*_*ant 6 java amazon-s3 amazon-web-services

我正在使用AWS Java SDK与S3进行交互.我想遍历存储中的所有对象并检索每个对象的元数据.我可以使用列表迭代对象:

ObjectListing  list= s3client.listObjects("bucket name");
Run Code Online (Sandbox Code Playgroud)

但我只能通过列表中的对象检索摘要.而不是摘要我需要每个对象的元数据,如getObjectMetadata()S3Object类中的方法提供的元数据.我怎么做到的?

Nee*_*rma 8

您可以从lisObject返回的objectSummary中获取四个默认元数据: Last Modified, Storage Type, Etag and Size.

要获取对象的元数据,您需要对对象执行HEAD对象请求,或者在对象上调用以下方法:

GetObjectMetadataRequest(String bucketName, String key)
Run Code Online (Sandbox Code Playgroud)

看这个:

 ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
                    .withBucketName(bucketName);
            ObjectListing objectListing;
            do {
                objectListing = s3client.listObjects(listObjectsRequest);
                for (S3ObjectSummary objectSummary
                        : objectListing.getObjectSummaries()) {
                    /** Default Metadata **/
                    Date dtLastModified = objectSummary.getLastModified();
                    String sEtag = objectSummary.getETag();
                    long lSize = objectSummary.getSize();
                    String sStorageClass = objectSummary.getStorageClass();
                    /** To get user defined metadata **/
                    ObjectMetadata objectMetadata = s3client.getObjectMetadata(bucketName, objectSummary.getKey());
                    Map userMetadataMap = objectMetadata.getUserMetadata();
                    Map rowMetadataMap = objectMetadata.getRawMetadata();
                }
                listObjectsRequest.setMarker(objectListing.getNextMarker());
            } while (objectListing.isTruncated());
Run Code Online (Sandbox Code Playgroud)

有关GetObjectMetadataRequest的更多详细信息,请查看此链接.

  • API v2 有 `getObject` 方法,它接受 `GetObjectRequest` 对象并返回一个 `GetObjectResponse`。`GetObjectResponse#metadata` 返回元数据信息的 `Map`。 (2认同)