You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用AWS SDK for Java 2.x查看S3对象元数据?

没问题,我刚折腾过这个,AWS SDK for Java 2.x确实把V1里的getObjectMetadata换成了更符合REST语义的headObject方法,给你一步步讲怎么用:

获取S3对象元数据(AWS SDK for Java 2.x)

在V2的API中,获取对象元数据需要通过HeadObject操作来实现——这和REST API里用HEAD请求获取对象元数据的逻辑完全一致。具体步骤如下:

  • 构建HeadObjectRequest,指定目标桶名和对象键
  • 调用S3Client的headObject()方法获取HeadObjectResponse
  • 从响应对象中直接读取内置元数据,或者通过metadata()获取自定义元数据

完整代码示例

import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.HeadObjectRequest;
import software.amazon.awssdk.services.s3.model.HeadObjectResponse;
import software.amazon.awssdk.services.s3.model.NoSuchKeyException;

public class FetchS3Metadata {
    public static void main(String[] args) {
        // 初始化S3Client(建议用try-with-resources自动关闭)
        try (S3Client s3Client = S3Client.create()) {
            String bucketName = "myBucket";
            String objectKey = "myfile.doc";

            // 构建请求对象
            HeadObjectRequest request = HeadObjectRequest.builder()
                    .bucket(bucketName)
                    .key(objectKey)
                    .build();

            try {
                // 获取元数据响应
                HeadObjectResponse response = s3Client.headObject(request);

                // 读取常见内置元数据字段
                String contentType = response.contentType();
                String cacheControl = response.cacheControl();
                long contentLength = response.contentLength();

                System.out.println("Content-Type: " + contentType);
                System.out.println("Cache-Control: " + cacheControl);
                System.out.println("文件大小: " + contentLength + " bytes");

                // 读取自定义元数据(前缀会自动去掉"x-amz-meta-")
                System.out.println("\n自定义元数据:");
                response.metadata().forEach((key, value) -> 
                    System.out.println(key + ": " + value)
                );
            } catch (NoSuchKeyException e) {
                System.err.println("对象不存在: " + objectKey);
            }
        }
    }
}

关键说明

  • V2的API设计更强调“请求-响应”的明确性,所有参数都通过RequestBuilder构建,比V1的重载方法更清晰
  • 如果目标对象不存在,headObject()会抛出NoSuchKeyException,记得捕获处理
  • 内置元数据(如Content-Type、Cache-Control)都有对应的getter方法,直接调用即可;自定义元数据则通过metadata()返回的Map获取,SDK会自动去除x-amz-meta-前缀
  • 如果你只需要部分元数据,也可以在请求中指定fields参数来过滤返回结果,减少数据传输

内容的提问来源于stack exchange,提问作者Arcones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:45:20