Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 15 additions & 4 deletions src/main/java/com/example/solidconnection/s3/S3Controller.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<UploadedFileUrlResponse> uploadPreProfileImage(
Expand Down Expand Up @@ -46,4 +52,9 @@ public ResponseEntity<UploadedFileUrlResponse> uploadLanguageImage(
UploadedFileUrlResponse profileImageUrl = s3Service.uploadFile(imageFile, ImgType.LANGUAGE_TEST);
return ResponseEntity.ok(profileImageUrl);
}

@GetMapping("/s3-url-prefix")
public ResponseEntity<urlPrefixResponse> getS3UrlPrefix() {
return ResponseEntity.ok(new urlPrefixResponse(s3Default, s3Uploaded, cloudFrontDefault, cloudFrontUploaded));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -116,4 +116,21 @@ public interface S3ControllerSwagger {
}
)
ResponseEntity<UploadedFileUrlResponse> 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<urlPrefixResponse> getS3UrlPrefix();
}
17 changes: 4 additions & 13 deletions src/main/java/com/example/solidconnection/s3/S3Service.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<UploadedFileUrlResponse> uploadFiles(List<MultipartFile> multipartFile, ImgType imageFile) {
Expand Down Expand Up @@ -101,7 +100,7 @@ public List<UploadedFileUrlResponse> uploadFiles(List<MultipartFile> 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;
Expand Down Expand Up @@ -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) {
Expand All @@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.example.solidconnection.s3;

public record urlPrefixResponse(
String s3Default,
String s3Uploaded,
String cloudFrontDefault,
String cloudFrontUploaded
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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
Expand Down