Spring boot에서 AWS S3 파일업로드 하는 방법이다.
Spring boot AWS 배포 방법
2018/10/26 - [Develop/Spring Boot] - Spring Boot AWS Elastic BeanStalk을 이용한 배포
AWS Python Lambda 사용방법
2018/11/16 - [Develop/Python] - AWS Python Lambda (CloudWatch Lambda) 사용하기
1. S3에서 버킷을 하나 생성한다.
버킷을 생성할 때 주의할 점은 이름에 대문자가 들어가면 안되고 특수문자가 들어가면안된다. 또한, 이 버킷의 이름은 AWS S3의 전체 버킷 이름들과 중복이 되면 안된다. 예를들어 test라는 버킷을 한 경우 누군가 test라는 버킷을 사용중이라면 test라는 이름으로 버킷을 생성할 수 없다.
이름을 정한 후 옵션이나 권한 설정은 필요하면 설정을 하시고 그 외 그냥 다음을 눌러 생성한다. 어차피 옵션이나 권한은 S3를 생성하고 다시 설정을 할 수 있다.
2. Spring boot pom.xml에 dependency를 추가한다.
s3 dependency를 추가한다.
com.amazonaws aws-java-sdk-s3 1.11.452
그리고 Multipartfile 을 사용할 것이기 때문에 Multipartfile dependency를 추가한다.
commons-fileupload commons-fileupload 1.3.3
3. appliaction.properties 파일 설정.
리전 정보는 옆의 링크에서 확인할 수 있다.- https://docs.aws.amazon.com/ko_kr/general/latest/gr/rande.html
cloud.aws.credentials.accessKey=IAM USER에서 확인 cloud.aws.credentials.secretKey=IAM USER에서 확인 cloud.aws.s3.bucket=buckettestgogo cloud.aws.region.static=ap-northeast-2
추가로 Mutlipartfile의 파일 크기 범위를 정하고 싶으면 application.properties에 아래와 같이 추가한다.
spring.http.multipart.max-file-size=10MB spring.http.multipart.max-request-size=10MB
4. 파일업로드
AmazonS3 의존성을 주입하고. bucket이름을 가져온다 굳이 @Value로 안가져와도 되고 buckettestgogo를 선언해도 된다.
ObjectMetadata를 통해 ContentType을 설정할 수 있다.
그리고 CloudFront를 사용하시는 분들이라면 metadata에 setCacheControl로 Cache설정이 가능하다.
또한. 파일의 권한을 지정할 수 있다. 아래 소스에는 읽기를 Public으로 설정하였다.
@Autowired private AmazonS3 amazonS3; @Value("${cloud.aws.s3.bucket}") private String bucket; public void s3Test(MultipartFile file, String fname) { TransferManager tm = TransferManagerBuilder.standard().withS3Client(amazonS3).build(); PutObjectRequest request; try { ObjectMetadata metadata = new ObjectMetadata(); metadata.setCacheControl("604800"); // 60*60*24*7 일주일 metadata.setContentType("image/png"); request = new PutObjectRequest(bucket, fname, file.getInputStream(), metadata) .withCannedAcl(CannedAccessControlList.PublicRead); // amazonS3.putObject(request); Upload upload = tm.upload(request); upload.waitForCompletion(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (AmazonServiceException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (AmazonClientException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
기본적인 예제를 활용하여 만들어 보았다 그 외에는 AWS에서 상세히 잘 설명되어 있다.
AWS 객체업로드 - https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/dev/HLuploadFileJava.html
AWS 리전정보 - https://docs.aws.amazon.com/ko_kr/general/latest/gr/rande.html
'Develop > Spring Boot' 카테고리의 다른 글
Spring boot MySQL JSON - MySQL JSON DATA TYPE 값 가져오기 (0) | 2018.11.30 |
---|---|
Spring boot Slack WebHook. 슬랙 웹훅(Java Slack WebHook) (0) | 2018.11.24 |
Spring Boot Json, hashmap to json , JsonObject 만들기- JSON 마지막 (0) | 2018.11.13 |
Spring Boot Deserialization Json, Deserialization JsonString to JsonObject - Json 4편 (0) | 2018.11.12 |
Spring Boot Json, Jackson을 이용한 JsonParsing - Json 3편 (0) | 2018.11.09 |