AWS S3 도입 후 발생했던 오류들
캡처 이미지와 같이 설정을 해줬다.
정상적으로 S3에 이미지가 저장되는 것을 확인할 수 있다.
cloud:
aws:
s3:
bucket:
url: [객체 제외한 URL]
bucketName: [버킷명]
credentials:
access-key: [액세스 키]
secret-key: [비밀 액세스 키]
region:
static: [리전]
stack:
auto: false
@Configuration
public class AwsS3Config {
@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() {
AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
return (AmazonS3Client) AmazonS3ClientBuilder
.standard()
.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
.withRegion(region)
.build();
}
}
@Slf4j
@RequiredArgsConstructor
@Service
public class AwsS3Uploader {
private final AmazonS3Client amazonS3Client;
@Value("${cloud.aws.s3.bucketName}")
private String bucket;
// S3 버킷에 파일 업로드하기
public String uploadFile(MultipartFile multipartFile) throws IOException {
String originalFilename = multipartFile.getOriginalFilename();
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(multipartFile.getSize());
objectMetadata.setContentType(multipartFile.getContentType());
amazonS3Client.putObject(bucket, originalFilename, multipartFile.getInputStream(), objectMetadata);
return amazonS3Client.getUrl(bucket, originalFilename).toString();
}
// S3 버킷에 있는 파일 삭제하기(DB와 데이터 정합성 유지를 위해, 리소스 낭비 방지)
public void deleteFile(String fileName) {
amazonS3Client.deleteObject(bucket, fileName);
}
}
S3 버킷 정책을 설정해야 문제를 해결할 수 있다.