55import com .somemore .global .imageupload .usecase .ImageUploadUseCase ;
66import com .somemore .global .imageupload .util .ImageUploadUtils ;
77import com .somemore .global .imageupload .validator .ImageUploadValidator ;
8- import jakarta .annotation .PostConstruct ;
98import lombok .RequiredArgsConstructor ;
109import org .springframework .beans .factory .annotation .Value ;
1110import org .springframework .stereotype .Service ;
1211import org .springframework .web .multipart .MultipartFile ;
1312import software .amazon .awssdk .core .sync .RequestBody ;
1413import software .amazon .awssdk .services .s3 .S3Client ;
1514import 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
1718import java .io .IOException ;
19+ import java .time .Duration ;
1820
1921import static com .somemore .global .exception .ExceptionMessage .UPLOAD_FAILED ;
2022
2325public 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