diff --git a/src/main/java/com/example/solidconnection/s3/S3Controller.java b/src/main/java/com/example/solidconnection/s3/S3Controller.java index 8da2984ea..7a1c1fc7c 100644 --- a/src/main/java/com/example/solidconnection/s3/S3Controller.java +++ b/src/main/java/com/example/solidconnection/s3/S3Controller.java @@ -2,11 +2,9 @@ import com.example.solidconnection.type.ImgType; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.security.Principal; @@ -17,6 +15,14 @@ public class S3Controller implements S3ControllerSwagger { private final S3Service s3Service; + @Value("${cloud.aws.s3.url.default}") + private String s3Default; + @Value("${cloud.aws.s3.url.uploaded}") + private String s3Uploaded; + @Value("${cloud.aws.cloudFront.url.default}") + private String cloudFrontDefault; + @Value("${cloud.aws.cloudFront.url.uploaded}") + private String cloudFrontUploaded; @PostMapping("/profile/pre") public ResponseEntity uploadPreProfileImage( @@ -46,4 +52,9 @@ public ResponseEntity uploadLanguageImage( UploadedFileUrlResponse profileImageUrl = s3Service.uploadFile(imageFile, ImgType.LANGUAGE_TEST); return ResponseEntity.ok(profileImageUrl); } + + @GetMapping("/s3-url-prefix") + public ResponseEntity getS3UrlPrefix() { + return ResponseEntity.ok(new urlPrefixResponse(s3Default, s3Uploaded, cloudFrontDefault, cloudFrontUploaded)); + } } diff --git a/src/main/java/com/example/solidconnection/s3/S3ControllerSwagger.java b/src/main/java/com/example/solidconnection/s3/S3ControllerSwagger.java index aa432b195..bce6bfe15 100644 --- a/src/main/java/com/example/solidconnection/s3/S3ControllerSwagger.java +++ b/src/main/java/com/example/solidconnection/s3/S3ControllerSwagger.java @@ -116,4 +116,21 @@ public interface S3ControllerSwagger { } ) ResponseEntity uploadLanguageImage(@RequestParam("file") MultipartFile imageFile); + + @SecurityRequirements + @SecurityRequirement(name = ACCESS_TOKEN) + @Operation( + summary = "S3 url prefix 확인", + responses = { + @ApiResponse( + responseCode = "200", + description = "S3 url prefix 반환", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = urlPrefixResponse.class) + ) + ) + } + ) + ResponseEntity getS3UrlPrefix(); } diff --git a/src/main/java/com/example/solidconnection/s3/S3Service.java b/src/main/java/com/example/solidconnection/s3/S3Service.java index 4bee94932..553367973 100644 --- a/src/main/java/com/example/solidconnection/s3/S3Service.java +++ b/src/main/java/com/example/solidconnection/s3/S3Service.java @@ -69,8 +69,7 @@ public UploadedFileUrlResponse uploadFile(MultipartFile multipartFile, ImgType i log.error("이미지 업로드 중 s3 클라이언트 예외 발생 : {}", e.getMessage()); throw new CustomException(S3_CLIENT_EXCEPTION); } - - return new UploadedFileUrlResponse(amazonS3.getUrl(bucket, fileName).toString()); + return new UploadedFileUrlResponse(fileName); } public List uploadFiles(List multipartFile, ImgType imageFile) { @@ -101,7 +100,7 @@ public List uploadFiles(List multipartFi log.error("이미지 업로드 중 s3 클라이언트 예외 발생 : {}", e.getMessage()); throw new CustomException(S3_CLIENT_EXCEPTION); } - uploadedFileUrlResponseList.add(new UploadedFileUrlResponse(amazonS3.getUrl(bucket, fileName).toString())); + uploadedFileUrlResponseList.add(new UploadedFileUrlResponse(fileName)); } return uploadedFileUrlResponseList; @@ -140,8 +139,7 @@ public void deleteExProfile(String email) { } public void deletePostImage(String url) { - String key = getPostImageUrl(url); - deleteFile(key); + deleteFile(url); } private void deleteFile(String fileName) { @@ -158,13 +156,6 @@ private void deleteFile(String fileName) { private String getExProfileImageUrl(String email) { SiteUser siteUser = siteUserRepository.getByEmail(email); - String fileName = siteUser.getProfileImageUrl(); - int domainStartIndex = fileName.indexOf(".com"); - return fileName.substring(domainStartIndex + 5); - } - - private String getPostImageUrl(String url) { - int domainStartIndex = url.indexOf(".com"); - return url.substring(domainStartIndex + 5); + return siteUser.getProfileImageUrl(); } } diff --git a/src/main/java/com/example/solidconnection/s3/urlPrefixResponse.java b/src/main/java/com/example/solidconnection/s3/urlPrefixResponse.java new file mode 100644 index 000000000..59eac23ca --- /dev/null +++ b/src/main/java/com/example/solidconnection/s3/urlPrefixResponse.java @@ -0,0 +1,9 @@ +package com.example.solidconnection.s3; + +public record urlPrefixResponse( + String s3Default, + String s3Uploaded, + String cloudFrontDefault, + String cloudFrontUploaded +) { +} diff --git a/src/main/java/com/example/solidconnection/siteuser/service/SiteUserService.java b/src/main/java/com/example/solidconnection/siteuser/service/SiteUserService.java index 0ab6aa0d2..793627adf 100644 --- a/src/main/java/com/example/solidconnection/siteuser/service/SiteUserService.java +++ b/src/main/java/com/example/solidconnection/siteuser/service/SiteUserService.java @@ -106,7 +106,7 @@ private void validateProfileImage(MultipartFile imageFile) { } private boolean isDefaultProfileImage(String profileImageUrl) { - String prefix = "https://solid-connection-uploaded.s3.ap-northeast-2.amazonaws.com/profile/"; + String prefix = "profile/"; return profileImageUrl == null || !profileImageUrl.startsWith(prefix); } diff --git a/src/test/java/com/example/solidconnection/unit/service/SiteUserServiceTest.java b/src/test/java/com/example/solidconnection/unit/service/SiteUserServiceTest.java index 7cfeb94c6..860f76e11 100644 --- a/src/test/java/com/example/solidconnection/unit/service/SiteUserServiceTest.java +++ b/src/test/java/com/example/solidconnection/unit/service/SiteUserServiceTest.java @@ -63,7 +63,7 @@ private SiteUser createSiteUser() { return new SiteUser( "test@example.com", "nickname", - "https://solid-connection-uploaded.s3.ap-northeast-2.amazonaws.com/profile/abcd", + "profile/fajwoiejoiewjfoi", "1999-01-01", PreparationStatus.CONSIDERING, Role.MENTEE, @@ -78,7 +78,7 @@ private MultipartFile createMockImageFile() { } private UploadedFileUrlResponse createUploadedFileUrlResponse() { - return new UploadedFileUrlResponse("https://s3.example.com/test1.png"); + return new UploadedFileUrlResponse("profile/fajwoiejoiewjfoi"); } @Test