From 9b1bd16d1b9c828ca72d10d2388f93e3b6c77e34 Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Mon, 20 Jul 2026 16:45:52 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B6=84=EB=A5=98=EB=8D=B0=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=EC=85=8B=20=EC=97=85=EB=A1=9C=EB=93=9C=20chunk=20API=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../training/upload/UploadApiController.java | 30 +++++++++++++++++++ .../upload/service/UploadService.java | 11 ++++++- src/main/resources/application-dev.yml | 2 ++ src/main/resources/application-prod.yml | 2 ++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/kamco/cd/training/upload/UploadApiController.java b/src/main/java/com/kamco/cd/training/upload/UploadApiController.java index f409d14..f5733e4 100644 --- a/src/main/java/com/kamco/cd/training/upload/UploadApiController.java +++ b/src/main/java/com/kamco/cd/training/upload/UploadApiController.java @@ -111,4 +111,34 @@ public class UploadApiController { return ApiResponseDto.ok(uploadService.getUploadStatus(statusReq)); } */ + + @Operation(summary = "분류 데이터셋 대용량 파일 분할 전송", description = "분류 데이터셋 파일 대용량 파일을 청크 단위로 전송합니다.") + @ApiResponses( + value = { + @ApiResponse(responseCode = "200", description = "청크 업로드 성공", content = @Content), + @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), + @ApiResponse(responseCode = "404", description = "업로드 세션을 찾을 수 없음", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @PostMapping(value = "/chunk-upload-cls", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public ApiResponseDto uploadChunkClsDataSetFile( + @RequestParam("fileName") String fileName, + @RequestParam("fileSize") long fileSize, + @RequestParam("chunkIndex") Integer chunkIndex, + @RequestParam("chunkTotalIndex") Integer chunkTotalIndex, + @RequestPart("chunkFile") MultipartFile chunkFile, + @RequestParam("uuid") UUID uuid) { + + String uploadDivi = "cls-dataset"; + + UploadDto.UploadAddReq upAddReqDto = new UploadDto.UploadAddReq(); + upAddReqDto.setFileName(fileName); + upAddReqDto.setFileSize(fileSize); + upAddReqDto.setChunkIndex(chunkIndex); + upAddReqDto.setChunkTotalIndex(chunkTotalIndex); + upAddReqDto.setUploadDivi(uploadDivi); + upAddReqDto.setUuid(uuid); + + return ApiResponseDto.ok(uploadService.uploadChunk(upAddReqDto, chunkFile)); + } } diff --git a/src/main/java/com/kamco/cd/training/upload/service/UploadService.java b/src/main/java/com/kamco/cd/training/upload/service/UploadService.java index d568c49..3e04a0b 100644 --- a/src/main/java/com/kamco/cd/training/upload/service/UploadService.java +++ b/src/main/java/com/kamco/cd/training/upload/service/UploadService.java @@ -32,6 +32,12 @@ public class UploadService { @Value("${file.dataset-tmp-dir}") private String datasetTmpDir; + @Value("${file.dataset-cls-dir}") + private String datasetClsDir; + + @Value("${file.dataset-cls-tmp-dir}") + private String datasetClsTmpDir; + // TODO 미사용시작 @Transactional public DmlReturn initUpload(UploadDto.InitReq initReq) { @@ -60,9 +66,12 @@ public class UploadService { Integer chunkTotalIndex = upAddReqDto.getChunkTotalIndex(); String status = "UPLOADING"; - if (uploadDivi.equals("dataset")) { + if (uploadDivi.equals("dataset")) { // 탐지데이터셋 tmpDataSetDir = datasetTmpDir; fianlDir = datasetDir; + } else if (uploadDivi.equals("cls-dataset")) { // 분류데이터셋 + tmpDataSetDir = datasetClsTmpDir; + fianlDir = datasetClsDir; } // 리턴용 파일 값 diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 0fef04f..70c7077 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -53,6 +53,8 @@ file: base_path: /backup/data/training dataset-dir: ${file.base_path}/request/ dataset-tmp-dir: ${file.dataset-dir}tmp/ + dataset-cls-dir: ${file.base_path}/request/cls/ + dataset-cls-tmp-dir: ${file.dataset-cls-dir}tmp/ pt-path: ${file.base_path}/response/v6-cls-checkpoints/ pt-FileName: yolov8_6th-6m.pt diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index f1c0ad3..13366fb 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -27,6 +27,8 @@ swagger: file: dataset-dir: /data/training/request/ dataset-tmp-dir: ${file.dataset-dir}tmp/ + dataset-cls-dir: ${file.base_path}/request/cls/ + dataset-cls-tmp-dir: ${file.dataset-cls-dir}tmp/ pt-path: /data/training/response/v6-cls-checkpoints/ pt-FileName: yolov8_6th-6m.pt -- 2.49.1