9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS SDK for JavaでS3メタデータを扱う

Last updated at Posted at 2025-02-21

課題

AWS SDK for Javaで、S3メタデータを扱うとき、日本語でまとまった情報を入手するのに苦労しました。

解決方針

どのようにSDKを利用したか、この記事にまとめます。

方法

前提

  • Javaバージョン: 17
  • AWS SDKバージョン: v2

書き込み

アップロードのリクエストにメタデータを付加します。メタデータはMap<String, String>の型で付加します。

例として、指定したバケットにファイルをアップロードするuploadFileToS3メソッドを、以下に記載します。

  // S3クライアントを用意
  private final S3Client s3Client;

  private void uploadFileToS3(
      byte[] file
    , String bucketName
    , String key
    , Map<String, String> metadata
  ) {

    try {
      s3Client.putObject(builder -> builder.bucket(bucketName).key(key).metadata(metadata).build(), RequestBody.fromBytes(file));
    } catch (Exception e) {
      throw new RuntimeException("ファイルのS3へのアップロードに失敗しました。", e);
    }
  }

注意点

メタデータのキーにはx-amz-meta-というプレフィックスを付ける必要があります。例えば、dateというキーのメタデータを付加したい場合、以下のようにマップを作成する必要があります。

  Map<String, String> metadata = new HashMap<>();
  metadata.put("x-amz-meta-date", "2024-04-01");

読み込み

まず、オブジェクトの情報をHeadObjectResponse型で取得し、そこからメタデータを取り出します。書き込み時と同じく、メタデータはMap<String, String>の型で取得できます。

例として、指定したオブジェクトのメタデータを取得するgetMetadataメソッドを、以下に記載します。

  // S3クライアントを用意
  private final S3Client s3Client;

  public Map<String, String> getMetadata(String bucketName, String key) {
    return s3Client.headObject(builder -> builder.bucket(bucketName).key(key).build()).metadata();
  }

注意点

メタデータのキーは、書き込み時とは逆に、プレフィックスx-amz-meta-が外された状態で返却されます。例えば、dateというキーのメタデータを取得したい場合、そのままdateというキーを指定して、値を取得します。

  Map<String, String> metadata = getMetadata("sample-backet", "sample-object");
  System.out.println(metadata.get("date"));
  // "2024-04-01"

参考資料

9
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?