22
33import com .depromeet .domain .image .domain .ImageFileExtension ;
44import com .depromeet .infra .config .s3 .S3Properties ;
5+ import java .net .URL ;
56import java .time .Duration ;
67import lombok .RequiredArgsConstructor ;
78import lombok .SneakyThrows ;
89import lombok .extern .slf4j .Slf4j ;
910import org .springframework .stereotype .Component ;
10- import software .amazon .awssdk .services .s3 .model .ObjectCannedACL ;
11+ import software .amazon .awssdk .services .s3 .model .PutObjectRequest ;
1112import software .amazon .awssdk .services .s3 .presigner .S3Presigner ;
1213import software .amazon .awssdk .services .s3 .presigner .model .PutObjectPresignRequest ;
1314
@@ -20,18 +21,24 @@ public class ImageUtil {
2021 private final S3Properties s3Properties ;
2122
2223 @ SneakyThrows
23- public String createPreSignedUrl (String fileName , ImageFileExtension fileExtension ) {
24- PutObjectPresignRequest request =
24+ public String createUploadUrl (String fileName , ImageFileExtension fileExtension ) {
25+ String contentType = getContentType (fileExtension );
26+
27+ PutObjectRequest putObj =
28+ PutObjectRequest .builder ()
29+ .bucket (s3Properties .bucket ())
30+ .key (fileName )
31+ .contentType (contentType ) // content-type만 포함
32+ .build ();
33+
34+ PutObjectPresignRequest presignReq =
2535 PutObjectPresignRequest .builder ()
26- .signatureDuration (Duration .ofMinutes (30 ))
27- .putObjectRequest (
28- builder ->
29- builder .bucket (s3Properties .bucket ())
30- .key (fileName )
31- .contentType (getContentType (fileExtension ))
32- .acl (ObjectCannedACL .PUBLIC_READ ))
36+ .putObjectRequest (putObj )
37+ .signatureDuration (Duration .ofMinutes (15 ))
3338 .build ();
34- return s3Presigner .presignPutObject (request ).url ().toString ();
39+
40+ URL url = s3Presigner .presignPutObject (presignReq ).url ();
41+ return url .toString ();
3542 }
3643
3744 private static String getContentType (ImageFileExtension fileExtension ) {
0 commit comments