diff --git a/src/main/java/com/divary/domain/image/service/ImageService.java b/src/main/java/com/divary/domain/image/service/ImageService.java index 676f341..ba549ae 100644 --- a/src/main/java/com/divary/domain/image/service/ImageService.java +++ b/src/main/java/com/divary/domain/image/service/ImageService.java @@ -192,9 +192,22 @@ public String processContentAndUpdateImages(String content, ImageType imageType, return updatedContent; } + + public String createFileUrl(Image image){ + String fileUrl; + + //s3Key에 license가 포함된 경우 Pre-signed URL 생성 + if (image.getS3Key() != null && image.getS3Key().contains("/license/")) { + fileUrl = imageStorageService.generatePreSignedUrl(image.getS3Key(), Duration.ofMinutes(10)); + log.info("라이센스 이미지 Pre-signed URL 생성 완료: {}", fileUrl); + } else { + fileUrl = imageStorageService.generatePublicUrl(image.getS3Key()); + }//이외의 경우에는 일반 public url 생성 + + return fileUrl; + } // 미디어 업로드 메인 로직 (이미지 + 동영상) - @Transactional public ImageResponse uploadImage(ImageUploadRequest request) { imageValidationService.validateUploadRequest(request); @@ -227,10 +240,12 @@ public ImageResponse uploadImage(ImageUploadRequest request) { .build(); Image savedImage = imageRepository.save(image); - - String fileUrl = imageStorageService.generatePublicUrl(s3Key); + + String fileUrl = createFileUrl(image); + return ImageResponse.from(savedImage, fileUrl); - + + } catch (IOException e) { log.error("미디어 업로드 중 오류 발생: {}", e.getMessage()); throw new BusinessException(ErrorCode.INTERNAL_SERVER_ERROR); @@ -244,22 +259,18 @@ public List getImagesByPath(String pathPattern) { return images.stream() .map(image -> { - String s3Key = image.getS3Key(); - String fileUrl; - - //s3Key에 license가 포함된 경우 Pre-signed URL 생성 - if (s3Key != null && s3Key.contains("/license/")) { - fileUrl = imageStorageService.generatePreSignedUrl(s3Key, Duration.ofMinutes(10)); - log.info("라이센스 이미지 Pre-signed URL 생성 완료: {}", fileUrl); - } else { - fileUrl = imageStorageService.generatePublicUrl(s3Key); - }//이외의 경우에는 일반 public url 생성 + String fileUrl = createFileUrl(image); return ImageResponse.from(image, fileUrl); }) .collect(Collectors.toList()); } + @Transactional(readOnly = true) + public List findByUploadPath(String pathPattern){ + return imageRepository.findByS3KeyStartingWith(pathPattern); + } + // 이미지 상세 조회 (URL 포함) public ImageResponse getImageById(Long imageId) { Image image = imageRepository.findById(imageId) @@ -388,7 +399,6 @@ public List findByTypeAndPostId(ImageType imageType, Long postId) { return imageRepository.findByTypeAndPostId(imageType, postId); } - // 미디어 메타데이터 추출 private MediaMetadata extractMediaMetadata(MultipartFile file) throws IOException { String contentType = file.getContentType(); diff --git a/src/main/java/com/divary/domain/member/service/MemberServiceImpl.java b/src/main/java/com/divary/domain/member/service/MemberServiceImpl.java index 763e68a..e17dd1e 100644 --- a/src/main/java/com/divary/domain/member/service/MemberServiceImpl.java +++ b/src/main/java/com/divary/domain/member/service/MemberServiceImpl.java @@ -4,6 +4,7 @@ import com.divary.common.util.EnumValidator; import com.divary.domain.image.dto.request.ImageUploadRequest; import com.divary.domain.image.dto.response.ImageResponse; +import com.divary.domain.image.entity.Image; import com.divary.domain.image.service.ImageService; import com.divary.domain.member.dto.requestDTO.MyPageGroupRequestDTO; import com.divary.domain.member.dto.requestDTO.MyPageLevelRequestDTO; @@ -93,18 +94,22 @@ public void updateLevel(Long userId, MyPageLevelRequestDTO requestDTO) { public MyPageImageResponseDTO uploadLicense(MultipartFile image, Long userId) { String uploadPath = "users/" + userId + "/license/"; + // 기존 이미지 조회 + List images = imageService.findByUploadPath(uploadPath); + + for (Image image1 : images) { + imageService.deleteImage(image1.getId()); + } + + // 새로운 이미지 업로드 ImageUploadRequest request = ImageUploadRequest.builder() .file(image) .uploadPath(uploadPath) .build(); - imageService.uploadImage(request); + ImageResponse imageResponse = imageService.uploadImage(request); - // Pre-signed URL 생성 - List imageResponses = imageService.getImagesByPath(uploadPath); - String fileUrl = imageResponses.getFirst().getFileUrl(); - - return new MyPageImageResponseDTO(fileUrl); + return new MyPageImageResponseDTO(imageResponse.getFileUrl()); } @Override @@ -205,9 +210,9 @@ public MyPageImageResponseDTO getLicenseImage(Long userId){ String uploadPath = "users/" + userId + "/license/"; - List imageResponses = imageService.getImagesByPath(uploadPath); + List images = imageService.findByUploadPath(uploadPath); - String fileUrl = imageResponses.getFirst().getFileUrl(); + String fileUrl = imageService.createFileUrl(images.getFirst()); return new MyPageImageResponseDTO(fileUrl); }