Amazon s3 AmazonS3:在单个请求中列出包含元数据的对象

Amazon s3 AmazonS3:在单个请求中列出包含元数据的对象,amazon-s3,Amazon S3,我不熟悉Amazon服务,我使用AmazonS3进行文件存储。我使用以下代码来列出对象 ListObjectsRequest lor = new ListObjectsRequest().withBucketName("BUCKETNAME"); ObjectListing objectListing = amazonS3Client.listObjects(lor); for (S3ObjectSummary summary: objectListing.getObjectSummaries(

我不熟悉Amazon服务,我使用AmazonS3进行文件存储。我使用以下代码来列出对象

ListObjectsRequest lor = new ListObjectsRequest().withBucketName("BUCKETNAME");
ObjectListing objectListing = amazonS3Client.listObjects(lor);
for (S3ObjectSummary summary: objectListing.getObjectSummaries()) {
    fileKeys.add(summary.getKey());
}
我想在上述单个请求中获取所有对象的元数据


这可能吗?

没有API可以为您提供对象列表及其元数据

ListObjectsRequest:此请求返回指定bucket中对象的摘要信息列表。根据请求参数,将返回其他信息,例如,如果指定了分隔符,则返回公共前缀。列表结果总是按字典顺序(字母顺序)返回

您可以从lisObject返回的objectSummary中获取四个默认元数据:
上次修改、存储类型、Etag和大小。

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

GetObjectMetadataRequest(String bucketName, String key)
看看这个:

 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());

有关GetObjectMetadataRequest的更多详细信息,请参见以下内容

你的答案更有用。但使用这种方式,性能会下降。例如,在我的bucket中,我只有60个对象来获取元数据,这大约需要3000毫秒。考虑50000个物体,需要25分钟。你能提出一些改进的想法吗?如果你只需要一些记录的元数据,可能会延迟加载元数据。令人沮丧的是,AWS提供的对象摘要中并没有包含这些内容。最好的解决方案是在其他地方具体化元数据