From a9aa1df85fe9fed31771cd090dc64cedcd35949d Mon Sep 17 00:00:00 2001 From: bjkim Date: Tue, 23 Sep 2025 16:45:03 +0900 Subject: [PATCH] =?UTF-8?q?[ADD]=20=EC=83=88=EB=A1=9C=EC=9A=B4=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EB=8B=A4=EC=9A=B4=EB=A1=9C=EB=93=9C=20API=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20(MinioAttachmentController)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MinioAttachmentController.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/main/java/kr/re/etri/autoflow/controllers/MinioAttachmentController.java b/src/main/java/kr/re/etri/autoflow/controllers/MinioAttachmentController.java index 7f76f56..3b8f753 100644 --- a/src/main/java/kr/re/etri/autoflow/controllers/MinioAttachmentController.java +++ b/src/main/java/kr/re/etri/autoflow/controllers/MinioAttachmentController.java @@ -1,10 +1,13 @@ package kr.re.etri.autoflow.controllers; +import io.minio.DownloadObjectArgs; import io.minio.GetObjectArgs; import io.minio.MinioClient; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletResponse; import kr.re.etri.autoflow.entity.MinioAttachmentEntity; import kr.re.etri.autoflow.payload.request.ProjectBaseSearchRequest; @@ -13,14 +16,22 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springdoc.core.annotations.ParameterObject; import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.io.InputStreamResource; +import org.springframework.core.io.Resource; import org.springframework.data.domain.Page; import org.springframework.http.*; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.*; @RestController @@ -101,6 +112,34 @@ public class MinioAttachmentController { } } + @GetMapping("/download_new") + public ResponseEntity downloadFile_new(@RequestParam String objectName) { + try { + // MinIO에서 스트리밍으로 가져오기 + InputStream is = minioClient.getObject( + GetObjectArgs.builder() + .bucket("mlpipeline") + .object(objectName) + .build() + ); + + InputStreamResource resource = new InputStreamResource(is); + + String encodedFileName = URLEncoder.encode(objectName, StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"); + + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename*=UTF-8''" + encodedFileName) + .contentType(MediaType.APPLICATION_OCTET_STREAM) + .body(resource); + + } catch (Exception e) { + log.error("파일 다운로드 실패", e); + return ResponseEntity.internalServerError().build(); + } + } + + @Operation(summary = "MinIO YAML 파일 읽기", description = "MinIO에서 YAML 파일을 다운로드하여 텍스트로 반환합니다.") @GetMapping(value = "/readYamlText", produces = MediaType.TEXT_PLAIN_VALUE) public ResponseEntity readYamlTextFromMinio(@RequestParam String objectName) {