Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.myteam.server.global.web.response.ResponseDto;
import org.myteam.server.upload.controller.response.S3FileUploadResponse;
import org.myteam.server.upload.service.S3PresignedUrlService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
Expand All @@ -20,18 +21,16 @@ public class S3FileUploadController {

/**
* Presigned URL 생성
*
* @param fileName 업로드할 파일의 이름
* @param contentType 파일의 MIME 타입 (예: image/png)
* @return Presigned URL
*/
@GetMapping("/upload")
public ResponseEntity<ResponseDto<String>> generatePresignedUrl(
public ResponseEntity<ResponseDto<S3FileUploadResponse>> generatePresignedUrl(
@RequestParam("contentType") String contentType,
@RequestParam("fileName") String fileName) {

// Presigned URL 생성
String response = s3PresignedUrlService.generatePresignedUrl(fileName, contentType);
S3FileUploadResponse response = s3PresignedUrlService.generatePresignedUrl(fileName, contentType);

return ResponseEntity.ok(new ResponseDto<>(SUCCESS.name(), "Presigned URL 생성 성공", response));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.myteam.server.upload.controller.response;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class S3FileUploadResponse {
private String presignedUrl;
private String downloadPath;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.apache.commons.io.FilenameUtils;
import org.myteam.server.global.exception.ErrorCode;
import org.myteam.server.global.exception.PlayHiveException;
import org.myteam.server.upload.controller.response.S3FileUploadResponse;
import org.myteam.server.upload.domain.ContentType;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
Expand All @@ -26,9 +27,8 @@ public class S3PresignedUrlService {
*
* @param fileName 업로드할 파일의 이름
* @param contentType 파일의 MIME 타입
* @return 생성된 presigned URL
*/
public String generatePresignedUrl(String fileName, String contentType) {
public S3FileUploadResponse generatePresignedUrl(String fileName, String contentType) {

// 미디어 타입 & 파일명 검사
verifyMimeType(contentType, fileName);
Expand Down Expand Up @@ -56,7 +56,11 @@ public String generatePresignedUrl(String fileName, String contentType) {
);

// URL 반환
return presignedPutObjectRequest.url().toString();
S3FileUploadResponse response = new S3FileUploadResponse();
response.setPresignedUrl(presignedPutObjectRequest.url().toString());
// S3 파일 path
response.setDownloadPath(bucket + "/" + uniqueFileName);
return response;
}

/**
Expand Down