ㅎㅎ 설날에 정리하겠습니당
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' // 현재 3.0.0이 최신임, 나중에 되는지 확인
#S3
cloud.aws.credentials.accessKey=여기
cloud.aws.credentials.secretKey=키를 넣으면 된다
cloud.aws.s3.bucket=버킷명
cloud.aws.region.static=ap-northeast-2
cloud.aws.stack.auto-=false
@Configuration
public class S3Config {
@Value("${cloud.aws.credentials.accessKey}")
private String accessKey;
@Value("${cloud.aws.credentials.secretKey}")
private String secretKey;
@Value("${cloud.aws.region.static}")
private String region;
@Bean //credentials 주입
public AmazonS3Client amazonS3Client() {
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
return (AmazonS3Client) AmazonS3ClientBuilder
.standard().enablePathStyleAccess()
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.withRegion(region)
.build();
}
}
@Slf4j
@RequiredArgsConstructor
@Service
public class S3Uploader {
@Autowired
private final AmazonS3Client amazonS3Client;
@Value("${cloud.aws.s3.bucket}")
private String bucket;
@Transactional
public String upload(File uploadFile, String dirName) {
String fileName = dirName + "/" + uploadFile.getName();
String uploadImageUrl = putS3(uploadFile, fileName);
return uploadImageUrl; // 업로드된 파일의 S3 URL 주소 반환
}
private String putS3(File uploadFile, String fileName) {
log.info("fileName : {}", fileName);
amazonS3Client.putObject(
new PutObjectRequest(bucket, fileName, uploadFile)
.withCannedAcl(CannedAccessControlList.PublicRead) // PublicRead 권한으로 업로드 됨
);
return amazonS3Client.getUrl(bucket, fileName).toString();
}
}