From 492d07c683ce2edb995c57c34f6a95fe185b80f3 Mon Sep 17 00:00:00 2001 From: HopeLi <1278288511@qq.com> Date: Fri, 6 Jun 2025 18:11:00 +0800 Subject: [PATCH] =?UTF-8?q?0605=20ljc=20=20=20=E6=8A=A5=E5=91=8A=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cd/casic/ci/api/TargetController.java | 10 ++--- .../service/target/TargetManagerService.java | 4 +- .../target/impl/TargetManagerServiceImpl.java | 23 ++++++++++- .../casic/ci/process/util/SftpUploadUtil.java | 41 ++++++++++++------- 4 files changed, 55 insertions(+), 23 deletions(-) diff --git a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TargetController.java b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TargetController.java index 2f4644b6..fb13b2a5 100644 --- a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TargetController.java +++ b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TargetController.java @@ -10,15 +10,15 @@ import cd.casic.ci.process.process.service.target.TargetVersionService; import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.framework.commons.pojo.CommonResult; import cd.casic.framework.commons.pojo.PageResult; -import cn.hutool.core.io.resource.InputStreamResource; import jakarta.annotation.Resource; import jakarta.annotation.security.PermitAll; +import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import org.jetbrains.annotations.NotNull; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import java.io.InputStream; +import java.io.IOException; import java.util.List; /** @@ -135,10 +135,10 @@ public class TargetController { @PostMapping(path="/fileDownload") - public CommonResult fileDownload(@RequestBody @Valid TargetDownloadReq req) throws SftpUploadUtil.SftpUploadException { + public CommonResult fileDownload(@RequestBody @Valid TargetDownloadReq req, HttpServletResponse httpResponse) throws SftpUploadUtil.SftpUploadException, IOException { - InputStream inputStream = targetManagerService.fileDownload(req); + String inputStream = targetManagerService.fileDownload(req); - return CommonResult.success(new InputStreamResource(inputStream)); + return CommonResult.success(inputStream); } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/TargetManagerService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/TargetManagerService.java index 5ea1d7ee..7876cf8a 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/TargetManagerService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/TargetManagerService.java @@ -10,7 +10,7 @@ import cd.casic.framework.commons.pojo.PageResult; import com.baomidou.mybatisplus.extension.service.IService; import jakarta.validation.Valid; -import java.io.InputStream; +import java.io.IOException; import java.util.List; /** @@ -39,5 +39,5 @@ public interface TargetManagerService extends IService { void updateVersion(@Valid TargetVersionUpdateReq req); - InputStream fileDownload(@Valid TargetDownloadReq req) throws SftpUploadUtil.SftpUploadException; + String fileDownload(@Valid TargetDownloadReq req) throws SftpUploadUtil.SftpUploadException, IOException; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java index e03f5342..5f48548c 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java @@ -28,8 +28,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; +import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; +import java.util.Base64; import java.util.List; import java.util.UUID; @@ -254,7 +257,7 @@ public class TargetManagerServiceImpl extends ServiceImpl entries = channelSftp.ls("."); + List fileNames = entries.stream() + .map(entry -> entry.getFilename()) + .filter(name -> !name.equals(".") && !name.equals("..")) + .toList(); + + System.out.println("远程目录中的文件列表: " + fileNames); + + // 尝试获取文件流 + try { + inputStream = channelSftp.get(fileName); + } catch (SftpException e) { + throw new SftpUploadException("获取远程文件流失败: " + fileName, e); } - // 获取文件流 - InputStream inputStream = channelSftp.get(fileName); if (inputStream == null) { - throw new SftpUploadException("无法获取远程文件输入流,请检查权限或路径: " + fileName); + throw new SftpUploadException("无法获取远程文件输入流,请检查文件是否存在或被其他进程占用: " + fileName); } return inputStream; - } catch (JSchException e) { throw new SftpUploadException("SFTP 连接或认证失败: " + e.getMessage(), e); } catch (SftpException e) { @@ -416,9 +429,9 @@ public class SftpUploadUtil { throw new SftpUploadException("SFTP 上传过程中发生未知异常: " + e.getMessage(), e); } finally { // 9. 关闭资源 (确保在任何情况下都关闭) - if (fis != null) { + if (inputStream != null) { try { - fis.close(); + inputStream.close(); } catch (IOException e) { System.err.println("关闭本地文件流失败: " + e.getMessage()); e.printStackTrace(); // 打印堆栈以便调试