0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaでAWSのS3ストレージからファイルをダウンロードする方法

Posted at

こんにちは、東です。
前回はJavaを利用してS3ストレージからファイルをアップロードする方法を
まとめましたので、今回はダウンロードについてです。

前回:JavaでAWSのS3ストレージからファイルをアップロードする方法

必要なことは?

以下のものが必要になります。
「ユーザーID」 →IAMユーザーのユーザーID
「シークレットアクセスキー」 →IAMユーザーのシークレットアクセスキー
「リージョン名」 →S3コンテナが配置されている地域のリージョン名
「ファイルパス」 →アップロードされたファイルの格納パス文字列
となります。

流れとしては
1.認証情報を用意

2.S3へアクセスするクライアントを作成。

3.ファイルをダウンロードする。

4.ブラウザへ書き出す。

という流れになります。
では、詳しく見ていきましょう。

手順

1.認証情報を用意

前回同様、AWSのS3ストレージへアクセスするためには、
「アクセスID」 「シークレットアクセスキー」 というユーザーIDとパスワードにあたるものが必要です。
また、S3ストレージがある 「リージョン」 という情報も必要です。
以下に参考にさせていただ記事を載せさせていただきます。

2.S3へアクセスするクライアントを作成。

続いてJava上でS3ストレージにアクセスできるようにアカウント情報を設定します。
AwsBasicCredentialsというクラスが用意されているので、「アクセスID」 「シークレットアクセスキー」 を渡すことで戻り値でCredential情報を取得できます。
上で取得したCredential情報をAmazonS3ClientBuilderに渡すだけで
AmazonS3クライアント情報を簡単に組み立てることができます。
コード的には以下のようになります。

Java
// S3クライアントを作成
public AmazonS3 getAmazonS3Account {
    // アクセスID、シークレットアクセスキーを設定する
    AwsBasicCredentials credentials = AwsBasicCredentials.create("アクセスID",
        "シークレットアクセスキー");

    // AmazonS3ClientBuilderを使用してクライアント情報を組み立てる
    AmazonS3 client = AmazonS3ClientBuilder.standard()
        .withCredentials(new AWSStaticCredentialsProvider(credentials)).withRegion(Regions.fromName("リージョン名"))
        .build();
    return client;
  }

3.ファイルをダウンロードする。

アップロードとは少々異なり、GetObjectRequestというクラスを使用して リクエスト を組み立てる必要があります。
GetObjectRequestへS3の バケット名、ファイルパス(ファイルの格納場所) を渡すことでリクエスト情報を作成します。
上記のリクエストを.getObjectというメソッドに渡すことでS3Objectという型でファイル情報を取得できます。
コードとしては以下のようになります。

Java
// ファイルをダウンロードする
public S3Object downloadFile (String "バケット名", String "ファイルパス"){
    // リクエストを組み立てる
    GetObjectRequest request = new GetObjectRequest("バケット名","ファイルパス")
    // S3からオブジェクトとして取得
    S3Object object = getaAmazonS3().getObject(request);
    return object;
}

4.ファイルをブラウザへ書き出す。

上記のコードを実行することでS3上にあるファイルが取得できますが、S3Objectという型はこのままでは使用することができません。
そのためS3ObjectInputStreamを使用しブラウザへ書き出す処理が必要になります。
コードとしては以下のようになります。

Java
  public void downloadToBrowser(HttpServletResponse response, String "バケット名", String "ファイルパス")
      throws Exception {
    try {
    // S3からファイルをダウンロード
      S3Object object = downloadFile("バケット名","ファイルパス");
    
    // getOutputStreamを使用しブラウザへ書き出す
      int length = 0;
      byte[] buffer = new byte[1024];
      S3ObjectInputStream inputStream = object.getObjectContent();
      BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
      OutputStream outputStream = response.getOutputStream();
      while ((length = inputStream.read(buffer)) >= 0) {
        outputStream.write(buffer, 0, length);
      }
      bufferedInputStream.close();
    } catch (Exception e) {
      throw e;
    }
  }

こうすることでファイルがブラウザへダウンロードされるかと思います。

まとめ

前回に引き続きS3からファイルをダウンロードする方法についてまとめました。
見ていただけた方のご参考にしていただければ幸いです。
ありがとうございました!

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?