New Ver By 현아

ㅎㅎ 설날에 정리하겠습니당

Old Ver

방학때 썼던 S3 코드 간단하게만 정리

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();
    }

}