【Java】AWS S3からファイルのダウンロードを行う手順

この記事は約6分で読めます。

調べていてわからない部分が多かったため、備忘録として残しておきます。

この記事では、JavaとSpring bootを用いて、AWSのS3へファイルを読み書きする方法をまとめます。

コードを張り付けただけではわからない部分も多いと思うので、AWSのSDK導入も一緒に解説します。

 

なお、以下を前提条件としていますので、この記事を読む前に確認ください。

・AWSアカウントを持っている
・認証キー発行済み
・統合開発環境:Eclipse
・Maven
・AWS SDK:v2を利用

AWS SDK for Javaはv1, v2の2種類あります。v2の方が最新なので、この記事ではv2を導入します。v1とv2ではコードの記述がところどころ違う箇所がありますので、注意してください。

v2の場合はimport software.amazon.awssdk.***の形で呼び出します。

 

スポンサーリンク

AWS 認証キーの設定

AWS S3へ接続するために、認証キーを設定します。

認証キーの設定方法はいろいろありますが、今回はSpring Frameworkを利用しているため、application.propertiesファイルから環境変数へ設定します。

aws.bucketName="S3 bucket name"
cloud.aws.credentials.access-key=AKI**********
cloud.aws.credentials.secret-key=81Hg***********************5

これらの環境変数を呼び出す際は、Lombockの@Valueアノテーションを利用します。以下コード参照。

S3認証用クラス

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;


@Component
@Configuration
public class S3ClientConfig{
	
	@Value("${aws.bucketName}")
	private String s3BucketName;
	
	@Value("${cloud.aws.credentials.access-key}")
	public String accessKey;
	
	@Value("${cloud.aws.credentials.secret-key}")
	public  String secretKey;

	@PostConstruct
	public void init() {
		awsCreds = AwsBasicCredentials.create(accessKey,secretKey);
	}
	private AwsBasicCredentials awsCreds;
	
	@Bean
	S3Client s3Client() {
		return S3Client.builder()
		        .region(Region.US_EAST_1)
		        .credentialsProvider(StaticCredentialsProvider.create(awsCreds))
		        .build();
	}
}

18-25行目:環境変数に登録した認証キーを変数に格納する。

27-31行目:認証キーからCredentialsを作成。認証キーの形式ではS3の認証ができません。

33-39行目:S3を扱うClientを作成。Clientへダウンロードやアップロードのリクエストし、処理してもらいます。

 

スポンサーリンク

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

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import software.amazon.awssdk.core.ResponseInputStream;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
import software.amazon.awssdk.services.s3.model.GetObjectResponse;


@Service
public class S3Manager {

	@Value("${aws.bucketName}")
	private String s3BucketName;
		
	@Resource
	private S3Client s3Client;
	
	///ファイルダウンロード///
	public String readFile(String objectKey) {
			//s3objectを取得
			GetObjectRequest getRequest = GetObjectRequest.builder().bucket(s3BucketName).key(objectKey).build();
			ResponseInputStream<GetObjectResponse> response = s3Client.getObject(getRequest);
			BufferedReader br = new BufferedReader(new InputStreamReader(response));
			StringBuilder sb = new StringBuilder();
			int c;
			
			try {
				while ((c = br.read()) != -1) {
					sb.append((char) c);
				}
				br.close();
				return sb.toString();
			} catch (IOException e) {
				e.printStackTrace();
				return null;
			}
	}
}

上記コードを実行すると、S3の指定バゲット内に格納されたファイルがString型で返ってきます。

今回は、JsonファイルをString型で取得しています。その後gsonライブラリでJson型へ戻して情報を取り扱う的なことをしています。

コードの内容については記事下の参考URLを確認してください。

コード利用時の要点だけ捕捉します。

S3 ファイルダウンロード時の注意点

objectKeyへ、S3のバケット内に保存したファイル名を指定します。

例として、testonionバケットに保存したsample.txtファイルをダウンロードしたいときは、以下のようになります。

s3BucketName=”testonion”

objectKey=”sample.txt”

※”/(スラッシュ)”いらないことに注意してください。

 

 

参考URL

コードはほぼこちらを参考にさせていただきました!

タイトルとURLをコピーしました