Skip to content

Commit 411c14b

Browse files
committed
test: 테스트 코드 분리
#104
1 parent 9c3deec commit 411c14b

3 files changed

Lines changed: 99 additions & 81 deletions

File tree

src/main/java/com/groom/sumbisori/domain/file/controller/FileController.java

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99
import com.groom.sumbisori.domain.file.service.ImageAnalyzeService;
1010
import com.groom.sumbisori.domain.file.service.S3PreSignedUrlService;
1111
import com.groom.sumbisori.domain.file.service.S3UploadService;
12-
import jakarta.servlet.http.HttpServletRequest;
1312
import jakarta.validation.Valid;
14-
import java.io.InputStream;
1513
import java.util.List;
1614
import lombok.RequiredArgsConstructor;
1715
import lombok.extern.slf4j.Slf4j;
@@ -22,12 +20,9 @@
2220
import org.springframework.web.bind.annotation.PathVariable;
2321
import org.springframework.web.bind.annotation.PostMapping;
2422
import org.springframework.web.bind.annotation.RequestBody;
25-
import org.springframework.web.bind.annotation.RequestHeader;
2623
import org.springframework.web.bind.annotation.RequestMapping;
2724
import org.springframework.web.bind.annotation.RequestParam;
28-
import org.springframework.web.bind.annotation.RequestPart;
2925
import org.springframework.web.bind.annotation.RestController;
30-
import org.springframework.web.multipart.MultipartFile;
3126

3227
@RestController
3328
@RequestMapping("/files")
@@ -37,7 +32,6 @@ public class FileController implements FileApi {
3732
private final S3PreSignedUrlService s3PreSignedUrlService;
3833
private final ImageAnalyzeService imageAnalyzeService;
3934
private final FileLookupService fileLookupService;
40-
private final S3UploadService s3UploadService;
4135

4236
@GetMapping("/{imageIdentifier}")
4337
public ResponseEntity<byte[]> getFileImage(@LoginUser Long userId, @PathVariable String imageIdentifier) {
@@ -56,51 +50,8 @@ public ResponseEntity<List<PreSignedUrlResponse>> createPreSignedUrl(
5650
return ResponseEntity.ok().body(s3PreSignedUrlService.create(request));
5751
}
5852

59-
@PostMapping("/test/presigned-url")
60-
public String createPreSignedUrl(@RequestBody TestPreSignedUrlRequest request) {
61-
return s3PreSignedUrlService.generatePresignedUploadUrl(
62-
request.fileName(),
63-
request.contentType(),
64-
request.fileSize()
65-
);
66-
}
67-
6853
@GetMapping("/analyze")
6954
public ResponseEntity<List<SeafoodRecognitionResponse>> imageAnalyze(@RequestParam String imageIdentifier) {
7055
return ResponseEntity.ok(imageAnalyzeService.analyze(imageIdentifier));
7156
}
72-
73-
@PostMapping("/multipart-file")
74-
public String uploadMultipartFile(@RequestPart("file") MultipartFile file) {
75-
try (InputStream inputStream = file.getInputStream()) {
76-
String fileName = file.getOriginalFilename();
77-
long contentLength = file.getSize();
78-
s3UploadService.uploadFileToS3(inputStream, fileName, contentLength);
79-
return "업로드 성공";
80-
} catch (Exception e) {
81-
log.error(e.getMessage(), e);
82-
return "업로드 실패: " + e.getMessage();
83-
}
84-
}
85-
86-
@PostMapping("/stream")
87-
public String uploadStream(
88-
HttpServletRequest request,
89-
@RequestHeader("file-name") String fileName,
90-
@RequestHeader(value = "Content-Length", required = false) Long contentLength
91-
) {
92-
try (InputStream inputStream = request.getInputStream()) {
93-
log.info("요청 Content-Type: {}", request.getContentType());
94-
long length = (contentLength != null && contentLength > 0)
95-
? contentLength
96-
: inputStream.available();
97-
return "업로드 성공";
98-
} catch (Exception e) {
99-
log.error("업로드 실패", e);
100-
return "업로드 실패: " + e.getMessage();
101-
}
102-
}
103-
104-
record TestPreSignedUrlRequest(String fileName, String contentType, Long fileSize) {
105-
}
10657
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.groom.sumbisori.domain.file.controller;
2+
3+
import com.groom.sumbisori.domain.file.service.S3PreSignedUrlService;
4+
import com.groom.sumbisori.domain.file.service.S3UploadService;
5+
import jakarta.servlet.http.HttpServletRequest;
6+
import java.io.InputStream;
7+
import lombok.RequiredArgsConstructor;
8+
import lombok.extern.slf4j.Slf4j;
9+
import org.springframework.web.bind.annotation.PostMapping;
10+
import org.springframework.web.bind.annotation.RequestBody;
11+
import org.springframework.web.bind.annotation.RequestHeader;
12+
import org.springframework.web.bind.annotation.RequestMapping;
13+
import org.springframework.web.bind.annotation.RequestPart;
14+
import org.springframework.web.bind.annotation.RestController;
15+
import org.springframework.web.multipart.MultipartFile;
16+
17+
//@RestController
18+
@RequestMapping("/files/test")
19+
@RequiredArgsConstructor
20+
@Slf4j
21+
public class FileTestController {
22+
// private final S3UploadService s3UploadService;
23+
// private final S3PreSignedUrlService s3PreSignedUrlService;
24+
// @PostMapping("/test/presigned-url")
25+
// public String createPreSignedUrl(@RequestBody FileController.TestPreSignedUrlRequest request) {
26+
// return s3PreSignedUrlService.generatePresignedUploadUrl(
27+
// request.fileName(),
28+
// request.contentType(),
29+
// request.fileSize()
30+
// );
31+
// }
32+
//
33+
// @PostMapping("/test/multipart-file")
34+
// public String uploadMultipartFile(@RequestPart("file") MultipartFile file) {
35+
// try (InputStream inputStream = file.getInputStream()) {
36+
// String fileName = file.getOriginalFilename();
37+
// long contentLength = file.getSize();
38+
// s3UploadService.uploadFileToS3(inputStream, fileName, contentLength);
39+
// return "업로드 성공";
40+
// } catch (Exception e) {
41+
// log.error(e.getMessage(), e);
42+
// return "업로드 실패: " + e.getMessage();
43+
// }
44+
// }
45+
//
46+
// @PostMapping("/test/stream")
47+
// public String uploadStream(
48+
// HttpServletRequest request,
49+
// @RequestHeader("file-name") String fileName,
50+
// @RequestHeader(value = "Content-Length", required = false) Long contentLength
51+
// ) {
52+
// try (InputStream inputStream = request.getInputStream()) {
53+
// log.info("요청 Content-Type: {}", request.getContentType());
54+
// long length = (contentLength != null && contentLength > 0)
55+
// ? contentLength
56+
// : inputStream.available();
57+
// s3UploadService.uploadFileToS3(inputStream, fileName, length);
58+
// return "업로드 성공";
59+
// } catch (Exception e) {
60+
// log.error("업로드 실패", e);
61+
// return "업로드 실패: " + e.getMessage();
62+
// }
63+
// }
64+
//
65+
// record TestPreSignedUrlRequest(String fileName, String contentType, Long fileSize) {
66+
// }
67+
}

src/main/java/com/groom/sumbisori/domain/file/service/S3PreSignedUrlService.java

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -64,38 +64,6 @@ private PreSignedUrlResponse getPreSignedPutUrl(FileInfo fileInfo) {
6464
return new PreSignedUrlResponse(s3PreSigner.presignPutObject(presignRequest).url().toExternalForm(), imageIdentifier);
6565
}
6666

67-
/**
68-
* S3에 파일을 직접 업로드할 수 있는 Presigned PUT URL을 생성합니다.
69-
*
70-
* @param fileName 업로드할 원본 파일명
71-
* @param contentType 파일의 Content-Type (예: image/jpeg)
72-
* @param fileSize 파일 크기 (bytes)
73-
* @return 클라이언트가 S3에 직접 업로드할 수 있는 Presigned URL
74-
*/
75-
public String generatePresignedUploadUrl(String fileName, String contentType, long fileSize) {
76-
// 1. S3에 업로드할 고유 객체 키 생성 (예: UUID 기반)
77-
String objectKey = "uploads/" + UUID.randomUUID() + "_" + fileName;
78-
79-
// 2. 업로드할 객체에 대한 요청 정보 구성
80-
PutObjectRequest objectRequest = PutObjectRequest.builder()
81-
.bucket(bucketName) // 실제 버킷명으로 대체
82-
.key(objectKey)
83-
.contentType(contentType)
84-
.contentLength(fileSize)
85-
.build();
86-
87-
// 3. Pre-Signed URL 생성 요청 설정 (예: 유효 시간 3분)
88-
PutObjectPresignRequest presignRequest = PutObjectPresignRequest.builder()
89-
.signatureDuration(Duration.ofMinutes(3))
90-
.putObjectRequest(objectRequest)
91-
.build();
92-
93-
// 4. Pre-Signed URL 생성
94-
PresignedPutObjectRequest presignedRequest = s3PreSigner.presignPutObject(presignRequest);
95-
96-
return presignedRequest.url().toString();
97-
}
98-
9967
/**
10068
* GET - 파일 다운로드용
10169
*/
@@ -119,4 +87,36 @@ public URL getPreSignedGetUrl(String imageIdentifier) {
11987
// 3. Pre-Signed URL 생성
12088
return s3PreSigner.presignGetObject(presignRequest).url();
12189
}
90+
//
91+
// /**
92+
// * S3에 파일을 직접 업로드할 수 있는 test Presigned PUT URL을 생성합니다.
93+
// *
94+
// * @param fileName 업로드할 원본 파일명
95+
// * @param contentType 파일의 Content-Type (예: image/jpeg)
96+
// * @param fileSize 파일 크기 (bytes)
97+
// * @return 클라이언트가 S3에 직접 업로드할 수 있는 Presigned URL
98+
// */
99+
// public String generatePresignedUploadUrl(String fileName, String contentType, long fileSize) {
100+
// // 1. S3에 업로드할 고유 객체 키 생성 (예: UUID 기반)
101+
// String objectKey = "uploads/" + UUID.randomUUID() + "_" + fileName;
102+
//
103+
// // 2. 업로드할 객체에 대한 요청 정보 구성
104+
// PutObjectRequest objectRequest = PutObjectRequest.builder()
105+
// .bucket(bucketName) // 실제 버킷명으로 대체
106+
// .key(objectKey)
107+
// .contentType(contentType)
108+
// .contentLength(fileSize)
109+
// .build();
110+
//
111+
// // 3. Pre-Signed URL 생성 요청 설정 (예: 유효 시간 3분)
112+
// PutObjectPresignRequest presignRequest = PutObjectPresignRequest.builder()
113+
// .signatureDuration(Duration.ofMinutes(3))
114+
// .putObjectRequest(objectRequest)
115+
// .build();
116+
//
117+
// // 4. Pre-Signed URL 생성
118+
// PresignedPutObjectRequest presignedRequest = s3PreSigner.presignPutObject(presignRequest);
119+
//
120+
// return presignedRequest.url().toString();
121+
// }
122122
}

0 commit comments

Comments
 (0)