티스토리 뷰
1. AWS 버킷 생성
docs.aws.amazon.com/ko_kr/AmazonS3/latest/user-guide/create-bucket.html
S3 버킷을 생성하려면 어떻게 해야 하나요? - Amazon Simple Storage Service
S3 버킷을 생성하려면 어떻게 해야 하나요? Amazon S3에 데이터를 업로드하기 전에, 먼저 AWS 리전 중 하나에 데이터를 저장할 버킷을 생성해야 합니다. 버킷을 생성하면, 해당 버킷에 데이터 객체를
docs.aws.amazon.com
2. 버킷 권한 변경
![]() |
3. IAM 생성
- 사용자 추가 ( 프로그래밍 방식 엑세스 체크)
![]() |
- 기존 정책에 연결
![]() |
- 사용자 만들기 ( Access key 와 Secret key 를 얻을 수 있음 )
4. pom.xml에 dependency 추가
<!-- AWS s3 -->
<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3 -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.372</version>
</dependency>
5. application.properties 추가
※ accessKey 와 secretKey는 git에 올리지 말 것. .gitignore에 application.properties 등록 필수
# AWS
cloud.aws.credentials.accessKey=userAccessKey
cloud.aws.credentials.secretKey=userSecretKey
## AWS
cloud.aws.s3.bucket=userProject
cloud.aws.region.static=ap-northeast-2
cloud.aws.stack.auto=false
6. S3Service 클래스
package com.spring.web.service;
import java.io.IOException;
import java.util.UUID;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.PutObjectRequest;
@Service
public class S3Service {
private AmazonS3 s3Client;
@Value("${cloud.aws.credentials.accessKey}")
private String accessKey;
@Value("${cloud.aws.credentials.secretKey}")
private String secretKey;
@Value("${cloud.aws.s3.bucket}")
private String bucket;
@Value("${cloud.aws.region.static}")
private String region;
// @PostContstruct -> @PostConstruct 어노테이션을 설정해놓은 init 메소드는 WAS가 띄워질 때 실행된다.
@PostConstruct
public void setS3Client() {
AWSCredentials credentials = new BasicAWSCredentials(this.accessKey, this.secretKey);
s3Client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials))
.withRegion(this.region).build();
}
public String upload(MultipartFile file) throws IOException {
String fileName = file.getOriginalFilename(); //오리지널 파일이름
String ext = fileName.substring(fileName.indexOf('.')); // 확장자
String saveFileName = getUuid() + ext; // 저장 할 파일이름 -> 중복될 수 있기 때문에 고유값인 UUID를 통해 임시 파일명으로 업로드
s3Client.putObject(new PutObjectRequest(bucket, saveFileName, file.getInputStream(), null)
.withCannedAcl(CannedAccessControlList.PublicRead));
// 저장된 이미지의 url 리턴
return s3Client.getUrl(bucket, saveFileName).toString();
}
private static String getUuid() {
return UUID.randomUUID().toString().replaceAll("-", "");
}
}
- 파일명이 같은 파일은 여러개 업로드 되지 않기 때문에 고유값인 UUID (거의 중복이없는)를 파일명으로 해서 업로드
7. 컨트롤러에서 해당 매서드 호출
@PostMapping("upload")
public String execWrite(@RequestPart MultipartFile file) throws IOException {
logger.info("file upload method start");
String imgPath = s3Service.upload(file);
return imgPath;
}
참고 : victorydntmd.tistory.com/334
[SpringBoot] AWS S3 연동 (1) - 파일 업로드 기본 (AmazonS3ClientBuilder)
Springboot S3 업로드를 구현하는 시리즈입니다. [SpringBoot] AWS S3 연동 (1) - 파일 업로드 기본 (AmazonS3ClientBuilder) [SpringBoot] AWS S3 연동 (2) - 파일 조작 및 Cloud Front 전체 소스 코드는 여..
victorydntmd.tistory.com
'Spring' 카테고리의 다른 글
JAVA_HOME not found in your environment 에러 (0) | 2021.02.04 |
---|