Spring Bootで使用するプラグイン設定
build.gradle全てを載せているので必要ないものも入っています。
S3に必要な設定にはコメントをつけてます。
buildscript { ext { kotlinVersion = '1.1.4-3' springBootVersion = '1.5.6.RELEASE' springCloudVersion = '1.2.1.RELEASE'// 必要 } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}") classpath "io.spring.gradle:dependency-management-plugin:0.5.2.RELEASE"// 必要 } } apply plugin: 'kotlin' apply plugin: 'kotlin-spring' apply plugin: 'eclipse' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management'// 必要 dependencyManagement { imports { mavenBom 'org.springframework.cloud:spring-cloud-aws:1.2.2.BUILD-SNAPSHOT'// 必要 } } version = '0.0.1-SNAPSHOT' sourceCompatibility = 1.8 compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" } repositories { mavenCentral() maven { url 'https://repo.spring.io/libs-snapshot' }// 必要 } dependencies { compile('org.springframework.boot:spring-boot-starter-web') compile("org.jetbrains.kotlin:kotlin-stdlib-jre8:${kotlinVersion}") compile("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}") compile("org.springframework.cloud:spring-cloud-aws-context:${springCloudVersion}")// 必要 }
環境
環境は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に設定することでも可能です。
cloud.aws: credentials: accessKey: ACCESSKEY secretKey: SECRETKEY region: static: ap-northeast-1 auto: false
アップロード処理
アップロードにはAmazonS3ClientのputObject()メソッドを使用します。
PutObjectRequestにバケット名とディレクトリ、ファイル名を指定するとその設定でバケット内に保存されます。
package com.sample.aws import com.amazonaws.services.s3.AmazonS3Client import com.amazonaws.services.s3.model.CannedAccessControlList import com.amazonaws.services.s3.model.ObjectMetadata import com.amazonaws.services.s3.model.PutObjectRequest import com.amazonaws.services.s3.model.PutObjectResult import org.apache.tomcat.util.http.fileupload.IOUtils import org.springframework.stereotype.Component import org.springframework.web.multipart.MultipartFile import java.io.InputStream @Component class S3 { var amazonS3Client: AmazonS3Client = AmazonS3Client() /** * S3にファイルアップロード * * @param file アップロードするファイル * @return アップロード結果 */ fun upload(file: MultipartFile): PutObjectResult { val inputStream: InputStream = file.getInputStream() val fileName: String = file.getOriginalFilename() val putObjectRequest: PutObjectRequest = PutObjectRequest("sample-bucket/directory-path", fileName, inputStream, ObjectMetadata()); putObjectRequest.setCannedAcl(CannedAccessControlList.PublicRead); val putObjectResult: PutObjectResult = amazonS3Client.putObject(putObjectRequest); IOUtils.closeQuietly(inputStream); return putObjectResult; } }
Curlでテストを行う
リクエストパラメータとして-F “file=@/sample.json”とするとローカルファイルを送ることができるのでCurlを使うとテストが楽に行えます。
curl -X POST http://127.0.0.1:8080/s3/upload -F "file=@/sample.json"
関連情報
おすすめ書籍
Springの概要からインストール方法、各コア機能(Security, Sessionなど)の解説が体系的にまとめられています。2018年に出版されたばかりなので情報も新しいです。これからSpring Bootでアプリケーション開発をしたい方の最初に読む一冊としておすすめします。対象は初心者だけでなく上級者まで幅広く学べるので是非読んでみてください!
The following two tabs change content below.
髙妻智一
2013年CyberAgent新卒入社
スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。
2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す