Skip to content

Commit

Permalink
Merge pull request #116 from Seasoning-Today/feat/#106
Browse files Browse the repository at this point in the history
프로필 이미지 썸네일 기능 구현
  • Loading branch information
csct3434 authored Apr 19, 2024
2 parents a5e3d2c + da4764a commit 247352b
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ private void registerArticleImages(Article article, List<MultipartFile> images)
int sequence = 1;
for (MultipartFile image : images) {
if (image != null && !image.isEmpty()) {
UploadFileInfo fileInfo = s3Service.uploadFile(image);
UploadFileInfo fileInfo = s3Service.uploadArticleImage(image);
articleImageRepository.save(ArticleImage.build(article, fileInfo, sequence++));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ private void updateArticleImages(Article article, List<MultipartFile> images) {
if (image == null || image.isEmpty()) {
continue;
}
UploadFileInfo fileInfo = s3Service.uploadFile(image);
UploadFileInfo fileInfo = s3Service.uploadArticleImage(image);
articleImageRepository.save(ArticleImage.build(article, fileInfo, sequence++));
}
}
Expand Down
56 changes: 44 additions & 12 deletions src/main/java/today/seasoning/seasoning/common/aws/S3Service.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.github.f4b6a3.tsid.TsidCreator;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
Expand All @@ -19,32 +19,64 @@ public class S3Service {
private final AmazonS3 amazonS3;

@Value("${cloud.aws.s3.bucket}")
private String s3BucketName;
private String BUCKET_NAME;

@Value("${cloud.aws.cloudfront.distribution.url}")
private String cloudfrontUrl;
private String CLOUDFRONT_DISTRIBUTION_URL;

public UploadFileInfo uploadFile(MultipartFile multipartFile) {
String filename = TsidCreator.getTsid().encode(62) + "/" + multipartFile.getOriginalFilename();
@Value("${cloud.aws.s3.image.prefix.original}")
private String ORIGINAL_PREFIX;

@Value("${cloud.aws.s3.image.prefix.resized}")
private String RESIZED_PREFIX;

@Value("${cloud.aws.s3.image.prefix.profile}")
private String PROFILE_IMAGE_PREFIX;

@Value("${cloud.aws.s3.image.prefix.article}")
private String ARTICLE_IMAGE_PREFIX;

public UploadFileInfo uploadProfileImage(MultipartFile multipartFile) {
String key = buildKey(PROFILE_IMAGE_PREFIX);
return uploadFile(multipartFile, key, true);
}

public UploadFileInfo uploadArticleImage(MultipartFile multipartFile) {
String key = buildKey(ARTICLE_IMAGE_PREFIX);
return uploadFile(multipartFile, key, false);
}

private UploadFileInfo uploadFile(MultipartFile multipartFile, String key, boolean resized) {
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(multipartFile.getSize());
metadata.setContentType(multipartFile.getContentType());

try {
amazonS3.putObject(s3BucketName, filename, multipartFile.getInputStream(), metadata);
return new UploadFileInfo(filename, cloudfrontUrl.concat(filename));
amazonS3.putObject(BUCKET_NAME, key, multipartFile.getInputStream(), metadata);
} catch (Exception e) {
log.error("Uploading File Failed : {} - {}", filename, e.getMessage());
log.error("S3 Upload Failed - key : {} / message : {}", key, e.getMessage());
throw new CustomException(HttpStatus.INTERNAL_SERVER_ERROR, "파일 업로드 실패");
}

if(resized) {
return new UploadFileInfo(key, CLOUDFRONT_DISTRIBUTION_URL + resolveResizedObjectKey(key));
}
return new UploadFileInfo(key, CLOUDFRONT_DISTRIBUTION_URL + key);
}

public void deleteFile(String filename) {
public void deleteFile(String key) {
try {
amazonS3.deleteObject(s3BucketName, filename);
amazonS3.deleteObject(BUCKET_NAME, key);
} catch (Exception e) {
log.error("Deleting File Failed : {} - {}", filename, e.getMessage());
log.error("S3 Delete Failed - key : {} / message : {}", key, e.getMessage());
}
}
}

private String buildKey(String prefix) {
return ORIGINAL_PREFIX + prefix + UUID.randomUUID();
}

private String resolveResizedObjectKey(String originalKey) {
return originalKey.replaceFirst(ORIGINAL_PREFIX, RESIZED_PREFIX);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ private void changeProfileImage(User user, MultipartFile image) {
if (image == null || image.isEmpty()) {
user.removeProfileImage();
} else {
UploadFileInfo uploadFileInfo = s3Service.uploadFile(image);
UploadFileInfo uploadFileInfo = s3Service.uploadProfileImage(image);
user.changeProfileImage(uploadFileInfo);
}

Expand Down

0 comments on commit 247352b

Please sign in to comment.