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
40 changes: 25 additions & 15 deletions src/main/java/com/divary/domain/image/service/ImageService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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);
Expand All @@ -244,22 +259,18 @@ public List<ImageResponse> 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<Image> findByUploadPath(String pathPattern){
return imageRepository.findByS3KeyStartingWith(pathPattern);
}

// 이미지 상세 쑰회 (URL 포함)
public ImageResponse getImageById(Long imageId) {
Image image = imageRepository.findById(imageId)
Expand Down Expand Up @@ -388,7 +399,6 @@ public List<Image> findByTypeAndPostId(ImageType imageType, Long postId) {
return imageRepository.findByTypeAndPostId(imageType, postId);
}


// λ―Έλ””μ–΄ 메타데이터 μΆ”μΆœ
private MediaMetadata extractMediaMetadata(MultipartFile file) throws IOException {
String contentType = file.getContentType();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -93,18 +94,22 @@ public void updateLevel(Long userId, MyPageLevelRequestDTO requestDTO) {
public MyPageImageResponseDTO uploadLicense(MultipartFile image, Long userId) {
String uploadPath = "users/" + userId + "/license/";

// κΈ°μ‘΄ 이미지 쑰회
List<Image> 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<ImageResponse> imageResponses = imageService.getImagesByPath(uploadPath);
String fileUrl = imageResponses.getFirst().getFileUrl();

return new MyPageImageResponseDTO(fileUrl);
return new MyPageImageResponseDTO(imageResponse.getFileUrl());
}

@Override
Expand Down Expand Up @@ -205,9 +210,9 @@ public MyPageImageResponseDTO getLicenseImage(Long userId){

String uploadPath = "users/" + userId + "/license/";

List<ImageResponse> imageResponses = imageService.getImagesByPath(uploadPath);
List<Image> images = imageService.findByUploadPath(uploadPath);

String fileUrl = imageResponses.getFirst().getFileUrl();
String fileUrl = imageService.createFileUrl(images.getFirst());

return new MyPageImageResponseDTO(fileUrl);
}
Expand Down