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を使用します。設定項目は少ないのでサンプルコードを参考にファイル名を決めてリターンするだけで完了です。

関連情報

おすすめ書籍

JPAに関しては下記パーフェクトJava EEが非常に詳しく書かれているのでぜひ読んでみてください。







コメントを残す

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