Skip to content

Commit 4a985d1

Browse files
committed
feat: presigned url 이미지 업로드 방식 추가
- presigned 이미지 업로드 방식 구현 - 테스트및 검증완료
1 parent 402292e commit 4a985d1

File tree

1 file changed

+28
-5
lines changed

1 file changed

+28
-5
lines changed

src/main/java/com/somemore/global/imageupload/service/ImageUploadService.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@
55
import com.somemore.global.imageupload.usecase.ImageUploadUseCase;
66
import com.somemore.global.imageupload.util.ImageUploadUtils;
77
import com.somemore.global.imageupload.validator.ImageUploadValidator;
8-
import jakarta.annotation.PostConstruct;
98
import lombok.RequiredArgsConstructor;
109
import org.springframework.beans.factory.annotation.Value;
1110
import org.springframework.stereotype.Service;
1211
import org.springframework.web.multipart.MultipartFile;
1312
import software.amazon.awssdk.core.sync.RequestBody;
1413
import software.amazon.awssdk.services.s3.S3Client;
1514
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
15+
import software.amazon.awssdk.services.s3.presigner.S3Presigner;
16+
import software.amazon.awssdk.services.s3.presigner.model.GetObjectPresignRequest;
1617

1718
import java.io.IOException;
19+
import java.time.Duration;
1820

1921
import static com.somemore.global.exception.ExceptionMessage.UPLOAD_FAILED;
2022

@@ -23,6 +25,7 @@
2325
public class ImageUploadService implements ImageUploadUseCase {
2426

2527
private final S3Client s3Client;
28+
private final S3Presigner s3Presigner;
2629
private final ImageUploadValidator imageUploadValidator;
2730

2831
@Value("${cloud.aws.s3.bucket}")
@@ -34,11 +37,31 @@ public class ImageUploadService implements ImageUploadUseCase {
3437
@Value("${default.image.url}")
3538
private String defaultImageUrl;
3639

37-
public static String DEFAULT_IMAGE_URL;
40+
public static final String DEFAULT_IMAGE_URL;
41+
private static final Duration GET_URL_EXPIRATION_DURATION = Duration.ofMinutes(3);
3842

39-
@PostConstruct
40-
private void init() {
41-
DEFAULT_IMAGE_URL = defaultImageUrl;
43+
static {
44+
DEFAULT_IMAGE_URL = "your-default-image-url"; // defaultImageUrl 값을 설정
45+
}
46+
47+
@Override
48+
public String getPresignedUrl(String filename) {
49+
if(imageUploadValidator.isEmptyFileName(filename)) {
50+
return null;
51+
}
52+
53+
String uniqueFilename = ImageUploadUtils.generateUniqueFileName(filename);
54+
55+
GetObjectPresignRequest getObjectPresignRequest = GetObjectPresignRequest.builder()
56+
.signatureDuration(GET_URL_EXPIRATION_DURATION)
57+
.getObjectRequest(builder -> builder
58+
.bucket(bucket)
59+
.key(uniqueFilename))
60+
.build();
61+
62+
return s3Presigner.presignGetObject(getObjectPresignRequest)
63+
.url()
64+
.toString();
4265
}
4366

4467
@Override

0 commit comments

Comments
 (0)