Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
 into feature/TSK-35/lucky-bubble
  • Loading branch information
pdh90345 committed Jul 9, 2024
2 parents 3f186cd + 589317c commit 126685e
Showing 1 changed file with 62 additions and 5 deletions.
67 changes: 62 additions & 5 deletions src/main/java/ongjong/namanmoo/service/AwsS3Service.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,43 @@ public class AwsS3Service {

private final AmazonS3 amazonS3Client;
private final String bucket;

private final String region;

/**
* AwsS3Service 생성자.
*
* @param accessKeyId AWS 액세스 키 ID
* @param secretKey AWS 시크릿 액세스 키
* @param bucket S3 버킷 이름
* @param region AWS 리전
*/
public AwsS3Service(

@Value("${cloud.aws.credentials.access-key}") String accessKeyId,
@Value("${cloud.aws.credentials.secret-key}") String secretKey,
@Value("${cloud.aws.s3.bucket}") String bucket,
@Value("${cloud.aws.region.static}") String region) {

// AWS 인증 정보 생성
BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKeyId, secretKey);

// AmazonS3 클라이언트 생성
this.amazonS3Client = AmazonS3ClientBuilder.standard()
.withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.build();

// 필드 초기화
this.bucket = bucket;
this.region = region;
}

/**
* MultipartFile을 S3에 업로드하고 업로드된 파일의 URL을 반환하는 메소드.
*
* @param multipartFile 업로드할 MultipartFile
* @return 업로드된 파일의 URL
* @throws IOException 파일 변환 또는 업로드 중 발생하는 예외
*/
public String uploadFile(MultipartFile multipartFile) throws IOException {
log.debug("Converting MultipartFile to File...");
File uploadFile = convertFile(multipartFile)
Expand All @@ -59,6 +80,13 @@ public String uploadFile(MultipartFile multipartFile) throws IOException {
return uploadImageUrl;
}

/**
* MultipartFile을 File 객체로 변환하는 메소드.
*
* @param file 변환할 MultipartFile
* @return Optional<File> 변환된 File 객체를 포함하는 Optional
* @throws IOException 파일 변환 중 발생하는 예외
*/
private Optional<File> convertFile(MultipartFile file) throws IOException {
String fileName = UUID.randomUUID() + "_" + file.getOriginalFilename();
File convertFile = new File(fileName);
Expand All @@ -73,10 +101,23 @@ private Optional<File> convertFile(MultipartFile file) throws IOException {
return Optional.empty();
}

/**
* 업로드될 파일의 고유한 파일 이름을 생성하는 메소드.
*
* @param uploadFile 업로드할 파일
* @return String 고유한 파일 이름
*/
private String generateFileName(File uploadFile) {
return UUID.randomUUID() + "_" + uploadFile.getName();
}

/**
* S3에 파일을 업로드하고 업로드된 파일의 URL을 반환하는 메소드.
*
* @param uploadFile 업로드할 파일
* @param fileName 업로드할 파일의 이름
* @return 업로드된 파일의 URL
*/
private String uploadFileToS3(File uploadFile, String fileName) {
amazonS3Client.putObject(
new PutObjectRequest(bucket, fileName, uploadFile)
Expand All @@ -88,11 +129,22 @@ private String uploadFileToS3(File uploadFile, String fileName) {
return getS3FileURL(fileName);
}

/**
* 업로드된 파일의 URL을 생성하는 메소드.
*
* @param fileName 파일 이름
* @return 업로드된 파일의 URL
*/
private String getS3FileURL(String fileName) {
String defaultUrl = "https://s3.amazonaws.com/";
return defaultUrl + bucket + "/" + fileName;
String defaultUrl = String.format("https://%s.s3.%s.amazonaws.com/", bucket, region);
return defaultUrl + fileName;
}

/**
* 임시 파일을 삭제하는 메소드.
*
* @param targetFile 삭제할 파일
*/
private void removeNewFile(File targetFile) {
if (targetFile.delete()) {
log.info("File delete success");
Expand All @@ -101,8 +153,13 @@ private void removeNewFile(File targetFile) {
}
}

/**
* S3에서 파일을 삭제하는 메소드.
*
* @param fileName 삭제할 파일의 이름
*/
public void delete(String fileName) {
log.info("File Delete : " + fileName);
amazonS3Client.deleteObject(bucket, fileName);
}
}
}

0 comments on commit 126685e

Please sign in to comment.