Java

【Java】Amazon S3からファイルをダウンロードする方法

はじめに

Java SDK(AWS SDK for Java 1.11)でAmazon S3からファイルをダウンロードする方法を紹介します。

事前準備

Amazon S3を使うには「aws-java-sdk-s3」を「pom.xml」もしくは「build.gradle」に追加します。今回の例ではpom.xmlを使用します。

<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-java-sdk-s3</artifactId>
  <version>1.11.828</version>
</dependency>

Amazon S3からファイルをダウンロードする

スポンサーリンク

ダウンロードしたファイルをローカルに保存する

Amazon S3からダウンロードしたファイルをローカル(サーバ)に保存する方法は以下です。

「getObject」にリクエストパラメータ(S3のバケット名、ダウンロードするファイルのパス(キー名))と、ファイルの保存先(File)を指定します。

/**
 * [Amazon S3]ファイルダウンロード
 * @return ダウンロードしたファイル
 */
public File getObject() {
    AWSCredentials credentials = new BasicAWSCredentials("アクセスキー","シークレットキー");

    // S3クライアントの生成
    AmazonS3 s3Client = AmazonS3ClientBuilder
            .standard()
            .withCredentials(new AWSStaticCredentialsProvider(credentials))
            .withRegion(Regions.AP_NORTHEAST_1)
            .build();

    // バケット名とS3のファイルパス(キー値)を指定
    GetObjectRequest request = new GetObjectRequest("bucketName", "dir/sample.png");

    // ファイル保存先
    File file = new File("c:/temp/sample.png");

    // ファイルダウンロード
    s3Client.getObject(request, file);

    return file;
}

ダウンロードしたファイル(バイナリデータ)をBase64に変換する

Amazon S3からダウンロードしたファイルをローカルに保存するのではなく、バイナリデータで取得する方法は以下です。

今回の例では、更にバイナリデータをBase64の文字列に変換しています。

Amazon S3 → サーバ → クライアントとサーバを経由する場合、「サーバ - クライアント」間のやり取りをBase64で行う場合があります。

このような場合は、Amazon S3からダウンロードしたファイルをサーバに保存するのではなく、バイナリデータで取得し、Base64に変換することで手間が省けます。

/**
 * [Amazon S3]ファイルダウンロード
 * @return ダウンロードしたファイル(Base64)
 */
public String getObjectBase64() {
    AWSCredentials credentials = new BasicAWSCredentials("アクセスキー","シークレットキー");

    // S3クライアントの生成
    AmazonS3 s3Client = AmazonS3ClientBuilder
            .standard()
            .withCredentials(new AWSStaticCredentialsProvider(credentials))
            .withRegion(Regions.AP_NORTHEAST_1)
            .build();

    // バケット名とS3のファイルパス(キー値)を指定
    GetObjectRequest request = new GetObjectRequest("bucketName", "dir/sample.png");

    // ファイルダウンロード
    S3Object object = s3Client.getObject(request);

    String fileBase64 = null;

    try {
        // バイナリデータをBase64に変換
        byte[] encode = Base64.getEncoder().encode(IOUtils.toByteArray(object.getObjectContent()));
        fileBase64 = new String(encode);

    } catch (IOException e) {
        // Base64への変換失敗
    }

    return fileBase64;
}

終わりに

本記事では、Amazon S3からファイルをダウンロードする方法を紹介しました。

次回は、【Amazon Cognito】JavaScriptのSKDでログイン処理を実装する方法を紹介します。

[AWS 関連記事]

helpful