Spring BootでS3からファイルをダウンロードする方法




どうも高妻です。Twitterでプログラミングのことや暗号通貨のことをつぶやいているのでよかったらフォローしてください。  

Spring Bootで使用するプラグイン設定

S3へのアップロードは下記を参照してください

Spring BootからS3にファイルをアップロードする方法

build.gradle全てを載せているので必要ないものも入っています。

S3に必要な設定にはコメントをつけてます。

環境

環境はEclipseとgradleで構築しています。バージョンは下記を参照してください。

  • Kotlin:1.1.4-3
  • Spring Boot:1.5.6.RELEASE
  • Spring Cloud:1.2.1.RELEASE

AWSの認証設定

Spring BootからS3にアクセスできるようにapplication.yamlまたはpropertiesに認証情報とリージョンを設定します。

別の方法として、S3にアクセスできるIAM RoleをEC2に設定することでも可能です。

ダウンロード処理

ダウンロードにはAmazonS3ClientのgetObject()メソッドとS3ObjectのgetObjectContent()メソッドを使用します。

ダウンロード処理のサンプルコードは下記です。コード量はすごく少ないのですぐ理解できるかと思います。

自分がここでハマったポイントとして、objectDataがInputStreamReaderに渡すとS3ObjectInputStreamじゃなくて、InputStreamを渡してくださいというエラーが出てコンパイルができなかったことでした。

ここが解決できなくてものすごく時間を使ったのですが、com.amazonaws.utiに対してビルドパスが通っていないことが原因ぽかったです。なので、ブルドパスの構成から外部Jarの追加でaws-java-sdk-coreのJarを追加したら解決しました。

たまに、gradleで入れた外部Jarにビルドパスが遠ていないことがあるので謎のコンパイルエラーが出ているときはよく確認するといいかと思います。

ブラウザからダウンロードできるようにする

ブラウザにはJSONを返す時のようなレスポンスではなくダウンロードようにヘッダーをカスタマイズしてあげないといけません。

レスポンスに指定しているクラスも少し特殊なResponseEntityを使用します。設定項目は少ないのでサンプルコードを参考にファイル名を決めてリターンするだけで完了です。

関連情報

おすすめ書籍

Springの概要からインストール方法、各コア機能(Security, Sessionなど)の解説が体系的にまとめられています。2018年に出版されたばかりなので情報も新しいです。これからSpring Bootでアプリケーション開発をしたい方の最初に読む一冊としておすすめします。対象は初心者だけでなく上級者まで幅広く学べるので是非読んでみてください!

 

The following two tabs change content below.

高妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 現在はTwitterなどSNSのテキスト解析を行うソーシャルメディア分析のサーバーサイドを開発中。言語はNode.js、Kotlinを使用。






よく読まれている関連記事はこちら



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です