こんにちは、東です。
前回は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クライアント情報を簡単に組み立てることができます。
コード的には以下のようになります。
// 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
という型でファイル情報を取得できます。
コードとしては以下のようになります。
// ファイルをダウンロードする
public S3Object downloadFile (String "バケット名", String "ファイルパス"){
// リクエストを組み立てる
GetObjectRequest request = new GetObjectRequest("バケット名","ファイルパス")
// S3からオブジェクトとして取得
S3Object object = getaAmazonS3().getObject(request);
return object;
}
4.ファイルをブラウザへ書き出す。
上記のコードを実行することでS3上にあるファイルが取得できますが、S3Object
という型はこのままでは使用することができません。
そのためS3ObjectInputStream
を使用しブラウザへ書き出す処理が必要になります。
コードとしては以下のようになります。
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からファイルをダウンロードする方法についてまとめました。
見ていただけた方のご参考にしていただければ幸いです。
ありがとうございました!