Java

Amazon S3へファイルをアップロードする方法(Java SDK)

2020年8月15日

はじめに

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>

S3へファイルアップロード

スポンサーリンク

保存したファイルをS3へアップロードする方法

ローカル(サーバ)に保存したファイルからAmazon S3へアップロードする方法は以下です。「putObject」に「アップロード先のバケット名」「アップロード先のパス(キー名)」「ファイル」を渡すことでアップロードすることができます。

/**
 * [Amazon S3]ファイルアップロード
 * @param アップロードするファイル
 */
public void putObject(File file) {
    AWSCredentials credentials = new BasicAWSCredentials("アクセスキー","シークレットキー");

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

    // ファイルをアップロード
    s3Client.putObject(
        // アップロード先バケット名
        "bucketName",
        // アップロード先のパス(キー名)
        "dir/sample.png",
        // ファイルの実体
        file
    );
}

Base64の文字列からS3へアップロードする方法

Base64の文字列からS3へアップロードする方法は以下です。

クライアント → サーバ → S3 とサーバを経由する場合は、クライアント側でBase64に変換した(バイナリデータ → Base64 )画像や音声ファイルを受け取ることがよくあります。

この時、サーバに一時的にファイルを保存して、そのファイルをS3にアップロードするのは手間です。(S3にアップロードした後、一時的に保存したファイルを削除する必要もある)

「putObject」は、バイナリデータでアップロードすることもできるので、クライアントから受け取ったBase64の文字列をバイナリデータに戻して、S3にアップロードすることができます。

/**
 * [Amazon S3]ファイルアップロード
 * @param Base64File アップロードするファイル(Base64)
 * @throws IOException
 */
public void putObjectBase64(String fileBase64) throws IOException {
    AWSCredentials credentials = new BasicAWSCredentials("アクセスキー","シークレットキー");

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

    byte[] buf = Base64.getDecoder().decode(fileBase64);

    try (InputStream input = new ByteArrayInputStream(buf)) {

        // メタ情報を生成
        ObjectMetadata metaData = new ObjectMetadata();
        metaData.setContentLength(buf.length);

        // リクエストを生成
        PutObjectRequest request = new PutObjectRequest(
            // アップロード先バケット名
            "bucketName",
            // アップロード先のパス(キー名)
            "dir/sample.png",
            // InputStream
            input,
            // メタ情報
            metaData
        );

        // アップロード
        s3Client.putObject(request);
    }
}

終わりに

本記事では、Amazon S3へファイルをアップロードする方法を紹介しました。

次回は「Amazon S3からファイルをダウンロードする方法」について紹介します。

[AWS 関連記事]

helpful