# JAVA로 이미지 파일 S3로 보내는 방법.
# AWSCredentials 에 accesskey와 secretkey 를 입력하고 AmazonS3 클래스를 생성한다.
# s3 버킷 이름을 설정한다.
# PutObjectRequest 에 담고 Upload 실시.
# 체크 사항.
- 이미지 파일의 경우 metadata.setContentType 에서 "image/*" 로 해도 되지만 "image/jpeg" 로 해야 URL로 파일을 바로 볼 수 있다. "image/*" 의 경우 URL 호출시 파일을 다운로드 받아버린다.
- 위 세팅을 함으로써 추후 이미지 태그에 S3 URL을 입력하는 것 만으로 이미지를 표출할 수 있다.
public int s3Upload(MultipartFile file, String fname) {
AmazonS3 amazonS3 = null;
String bucket = null;
AWSCredentials creds = new BasicAWSCredentials("accesskey", "secretkey");
amazonS3 =
AmazonS3ClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(creds))
.withRegion(Regions.AP_NORTHEAST_2) // region
.withForceGlobalBucketAccessEnabled(true) // access
.build();
bucket = "bucket-name";
TransferManager tm = TransferManagerBuilder.standard().withS3Client(amazonS3).build();
PutObjectRequest request;
try {
ObjectMetadata metadata = new ObjectMetadata();
metadata.setCacheControl("604800"); // 60*60*24*7 일주일
metadata.setContentType("image/jpeg");
request = new PutObjectRequest(bucket, fname, file.getInputStream(), metadata)
.withCannedAcl(CannedAccessControlList.PublicRead);
//amazonS3.putObject(request);
Upload upload = tm.upload(request);
upload.waitForCompletion();
return 1;
} catch (Exception e) {
//TODO Auto-generated catch block
e.printStackTrace();
return -1;
}
}