From 4cbd2b8d769ffdd0921e2ac26f286d0f8e4f165b Mon Sep 17 00:00:00 2001 From: teddy Date: Wed, 11 Feb 2026 12:16:32 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8C=80=EC=9A=A9=EB=9F=89=20=EB=8B=A4?= =?UTF-8?q?=EC=9A=B4=EB=A1=9C=EB=93=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20htm?= =?UTF-8?q?l=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../label/LabelAllocateApiController.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java b/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java index 1c893adc..1dc82963 100644 --- a/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java @@ -1,7 +1,6 @@ package com.kamco.cd.kamcoback.label; import com.kamco.cd.kamcoback.common.download.DownloadExecutor; -import com.kamco.cd.kamcoback.common.download.dto.DownloadSpec; import com.kamco.cd.kamcoback.config.api.ApiResponseDto; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InferenceDetail; @@ -25,6 +24,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; @@ -32,7 +32,9 @@ import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.Resource; import org.springframework.data.domain.Page; +import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -42,7 +44,6 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; @Slf4j @Tag(name = "라벨링 작업 관리", description = "라벨링 작업 배정 및 통계 조회 API") @@ -381,7 +382,7 @@ public class LabelAllocateApiController { @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) }) @GetMapping("/download/{uuid}") - public ResponseEntity download( + public ResponseEntity download( @Parameter(example = "6d8d49dc-0c9d-4124-adc7-b9ca610cc394") @PathVariable UUID uuid) throws IOException { @@ -391,9 +392,19 @@ public class LabelAllocateApiController { String uid = labelAllocateService.findLearnUid(uuid); Path zipPath = Paths.get(responsePath).resolve(uid + ".zip"); - - return downloadExecutor.stream( - new DownloadSpec(uuid, zipPath, uid + ".zip", MediaType.APPLICATION_OCTET_STREAM)); + long size = Files.size(zipPath); + Resource resource = new org.springframework.core.io.UrlResource(zipPath.toUri()); + return ResponseEntity.ok() + .header( + HttpHeaders.CONTENT_DISPOSITION, + "attachment; filename=\"" + zipPath.getFileName().toString() + "\"") + .header(HttpHeaders.ACCEPT_RANGES, "bytes") + .header("X-Accel-Buffering", "no") // nginx/ingress 버퍼링 방지 힌트 + .contentType(MediaType.APPLICATION_OCTET_STREAM) + .contentLength(size) + .body(resource); + // return downloadExecutor.stream( + // new DownloadSpec(uuid, zipPath, uid + ".zip", MediaType.APPLICATION_OCTET_STREAM)); } @Operation(summary = "라벨 파일 다운로드 이력 조회", description = "라벨 파일 다운로드 이력 조회")