Amazon SDK 1.x with Spring
Amazon SDK 2.x 버전이 존재하지만 'Amazon S3 전송 관리자, Amazon SQS 클라이언트 측 버퍼링' 등 일부 기능이 제한되어 있습니다.
AmazonS3 Bean 설정
@Configuration
@RequiredArgsConstructor
public class AmazonS3Beans {
public static final Regions CLIENT_REGION = Regions.AP_NORTHEAST_2;
@Value("${cloud.aws.credentials.accessKey}")
private String accessKey;
@Value("${cloud.aws.credentials.secretKey}")
private String secretKey;
@Bean
public AmazonS3 amazonS3() {
final BasicAWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
return AmazonS3ClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.withRegion(CLIENT_REGION)
.build();
}
}
AWS 접근 방법을 하나로 통일시키기 위해 bean으로 설정할 수 있습니다.
하나의 애플리케이션에서 복수 개의 AWS 접근 방법이 있다는 건 이상합니다.
PutObjectRequest 생성
protected PutObjectRequest createRequest(final String objectKey, final File file, final CannedAccessControlList cannedAclHeader) {
final PutObjectRequest request = new PutObjectRequest(bucketName, objectKey, file);
request.setMetadata(ObjectMetadataType.getMetadata(file));
request.withCannedAcl(cannedAclHeader);
return request;
}
object를 저장하기 위한 PutObjectRequest 생성을 위해 4가지가 필요합니다.
bucketName 대상 버킷 이름
objectKey 고유 식별자
file 대상 파일
cannedAclHeader 공개 범위
metadata 메타 데이터
Content-Type file이 아닌 stream으로 업로드 하는 경우 application/octet-stream가 지정됩니다.
PutObject - 객체 저장
public PutObjectResult putObject(final PutObjectRequest request) {
try {
return amazonS3.putObject(request);
} catch (final SdkClientException e) {
log.error(e.getClass().getName(), e);
throw EXCEPTION_AMAZON_S3_UPLOAD_FAIL.get();
}
}
PutObjectResult는 활용하지 않았습니다.
기대한 api들이 없었습니다.
Last updated
Was this helpful?