From 76dada626bc3a3fdeea7b6dc498160813c13924c Mon Sep 17 00:00:00 2001 From: HongGit Date: Tue, 29 Oct 2024 16:27:29 +0900 Subject: [PATCH] =?UTF-8?q?[REFACTOR/#155]=20=EC=9D=B4=EB=AF=B8=EC=A7=80?= =?UTF-8?q?=20=EC=97=85=EB=A1=9C=EB=93=9C=20persigned=20url=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=BC=EA=B4=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/external/s3/S3Controller.java | 11 +++++-- .../global/common/external/s3/S3Service.java | 30 ++++++++++++++++++- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/sopt/seonyakServer/global/common/external/s3/S3Controller.java b/src/main/java/org/sopt/seonyakServer/global/common/external/s3/S3Controller.java index 7ecd893..11b00a6 100644 --- a/src/main/java/org/sopt/seonyakServer/global/common/external/s3/S3Controller.java +++ b/src/main/java/org/sopt/seonyakServer/global/common/external/s3/S3Controller.java @@ -17,9 +17,14 @@ public class S3Controller { private final S3Service s3Service; - @GetMapping("/image") - public ResponseEntity getPreSignedUrl() { - return ResponseEntity.ok(s3Service.getUploadPreSignedUrl()); + @GetMapping("/image/profile") + public ResponseEntity getProfilePreSignedUrl() { + return ResponseEntity.ok(s3Service.getImageUploadPreSignedUrl()); + } + + @GetMapping("/image/businesscard") + public ResponseEntity getBusinesscardPreSignedUrl() { + return ResponseEntity.ok(s3Service.getUploadBusinesscardPreSignedUrl()); } @PatchMapping("/profile-image") diff --git a/src/main/java/org/sopt/seonyakServer/global/common/external/s3/S3Service.java b/src/main/java/org/sopt/seonyakServer/global/common/external/s3/S3Service.java index af5320f..52b24a8 100644 --- a/src/main/java/org/sopt/seonyakServer/global/common/external/s3/S3Service.java +++ b/src/main/java/org/sopt/seonyakServer/global/common/external/s3/S3Service.java @@ -50,7 +50,7 @@ public class S3Service { private final static String profilePath = "profiles/"; private final static String businessPath = "businessCard/"; - public PreSignedUrlResponse getUploadPreSignedUrl() { + public PreSignedUrlResponse getImageUploadPreSignedUrl() { try { // UUID 파일명 생성 String uuidFileName = UUID.randomUUID().toString() + ".jpg"; @@ -78,6 +78,34 @@ public PreSignedUrlResponse getUploadPreSignedUrl() { } } + public PreSignedUrlResponse getUploadBusinesscardPreSignedUrl() { + try { + // UUID 파일명 생성 + String uuidFileName = UUID.randomUUID().toString() + ".jpg"; + // 경로 + 파일 이름 + String key = businessPath + uuidFileName; + + PutObjectRequest putObjectRequest = PutObjectRequest.builder() + .bucket(bucketName) + .key(key) + .build(); + + // S3에서 업로드는 PUT 요청 + PutObjectPresignRequest preSignedUrlRequest = PutObjectPresignRequest.builder() + .signatureDuration(Duration.ofMinutes(PRE_SIGNED_URL_EXPIRE_MINUTE)) + .putObjectRequest(putObjectRequest) + .build(); + + // Persigned URL 생성 + URL url = s3Presigner.presignPutObject(preSignedUrlRequest).url(); + + return PreSignedUrlResponse.of(uuidFileName, url.toString()); + + } catch (RuntimeException e) { + throw new CustomException(ErrorType.GET_UPLOAD_PRESIGNED_URL_ERROR); + } + } + @Transactional public void uploadProfile(MultipartFile profileImage) { validateExtension(profileImage);