[ AWS S3 Bucket 생성 및 설정 ] 이 완료되었다면 ...?!
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
cloud:
aws:
s3:
bucket: <S3 버킷 이름>
credentials:
access-key: <저장해놓은 액세스 키>
secret-key: <저장해놓은 비밀 액세스 키>
region:
static: ap-northeast-2
auto: false
stack:
auto: false
@Configuration
public class S3Config {
@Value("${cloud.aws.credentials.access-key}")
private String accessKey;
@Value("${cloud.aws.credentials.secret-key}")
private String secretKey;
@Value("${cloud.aws.region.static}")
private String region;
@Bean
public AmazonS3Client amazonS3Client() {
BasicAWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
return (AmazonS3Client) AmazonS3ClientBuilder
.standard()
.withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.build();
}
}
@Service
@RequiredArgsConstructor
public class S3UploadService {
private final AmazonS3 amazonS3;
@Value("${cloud.aws.s3.bucket}")
private String bucket;
public String saveFile(MultipartFile multipartFile) throws IOException {
String originalFilename = multipartFile.getOriginalFilename();
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(multipartFile.getSize());
metadata.setContentType(multipartFile.getContentType());
amazonS3.putObject(bucket, originalFilename, multipartFile.getInputStream(), metadata);
return amazonS3.getUrl(bucket, originalFilename).toString();
}
}
@Service
@RequiredArgsConstructor
public class S3UploadService {
private final AmazonS3 amazonS3;
@Value("${cloud.aws.s3.bucket}")
private String bucket;
...
public ResponseEntity<UrlResource> downloadImage(String originalFilename) {
UrlResource urlResource = new UrlResource(amazonS3.getUrl(bucket, originalFilename));
String contentDisposition = "attachment; filename=\"" + originalFilename + "\"";
// header에 CONTENT_DISPOSITION 설정을 통해 클릭 시 다운로드 진행
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
.body(urlResource);
}
}
@Service
@RequiredArgsConstructor
public class S3UploadService {
private final AmazonS3 amazonS3;
@Value("${cloud.aws.s3.bucket}")
private String bucket;
...
public void deleteImage(String originalFilename) {
amazonS3.deleteObject(bucket, originalFilename);
}
}