From c6cc3fd17b5e92e99498c03fd57bc8a32456ae9b Mon Sep 17 00:00:00 2001 From: wodydl0 Date: Wed, 21 May 2025 01:46:59 +0900 Subject: [PATCH] =?UTF-8?q?RINGUS-89=20fix:=20=ED=95=9C=EA=B8=80=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=EC=8B=9C=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infra/storage/application/S3Service.java | 27 ++++++++++++++----- .../application/StoragePortfolioService.java | 2 +- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/java/es/princip/ringus/infra/storage/application/S3Service.java b/src/main/java/es/princip/ringus/infra/storage/application/S3Service.java index 5fc8db8..65c7ea1 100644 --- a/src/main/java/es/princip/ringus/infra/storage/application/S3Service.java +++ b/src/main/java/es/princip/ringus/infra/storage/application/S3Service.java @@ -38,17 +38,22 @@ public class S3Service { * @return 업로드된 파일의 S3 URL */ public String uploadFile(MultipartFile file, String folderPath, boolean isPublic) { - String fileName = UUID.randomUUID() + "_" + sanitizeFileName(file.getOriginalFilename()); + // 파일명: UUID + 확장자만 추출 + String extension = getExtension(file.getOriginalFilename()); + String fileName = UUID.randomUUID() + (extension != null ? "." + extension : ""); String s3Key = folderPath + "/" + fileName; + try { + PutObjectRequest.Builder requestBuilder = PutObjectRequest.builder() + .bucket(bucketName) + .key(s3Key) + .contentType(file.getContentType()); + s3Client.putObject( - PutObjectRequest.builder() - .bucket(bucketName) - .key(s3Key) - .contentType(file.getContentType()) - .build(), + requestBuilder.build(), RequestBody.fromInputStream(file.getInputStream(), file.getSize()) ); + } catch (IOException e) { throw new RuntimeException("파일 입력 스트림을 읽지 못했습니다.", e); } catch (S3Exception e) { @@ -97,4 +102,14 @@ public String generatePresignedUrl(String s3Key, Duration duration) { return presignedRequest.url().toString(); } } + + /** + * 파일 확장자 추출 + */ + private String getExtension(String fileName) { + if (fileName == null || !fileName.contains(".")) { + return null; + } + return fileName.substring(fileName.lastIndexOf('.') + 1); + } } diff --git a/src/main/java/es/princip/ringus/infra/storage/application/StoragePortfolioService.java b/src/main/java/es/princip/ringus/infra/storage/application/StoragePortfolioService.java index febed79..bed7c2b 100644 --- a/src/main/java/es/princip/ringus/infra/storage/application/StoragePortfolioService.java +++ b/src/main/java/es/princip/ringus/infra/storage/application/StoragePortfolioService.java @@ -21,7 +21,7 @@ public class StoragePortfolioService { @Transactional public String uploadMentorPortfolio(PortfolioUploadRequest request, Long memberId) { String folderPath = "portfolio/mentor/" + memberId; - String filePath = s3Service.uploadFile(request.file(), folderPath, false); + String filePath = s3Service.uploadFile(request.file(), folderPath, true); fileMemberRepository.save(request.toFileMemberEntity(filePath, memberId)); return filePath;