From bcc6ab0204e71becf60a8e4989e9c8a204183f5e Mon Sep 17 00:00:00 2001 From: HopeLi <1278288511@qq.com> Date: Thu, 24 Jul 2025 16:27:44 +0800 Subject: [PATCH] =?UTF-8?q?0724=20ljc=20=20=E4=BF=AE=E6=94=B9=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=9C=8D=E5=8A=A1=E5=99=A8=E6=8E=A5=E5=8F=A3=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E6=96=B0=E5=A2=9E=E7=9B=AE=E6=A0=87=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=B8=8B=E7=9A=84=E6=96=87=E4=BB=B6=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cd/casic/ci/api/TargetController.java | 5 +- .../target/TargetManagerDownloadResp.java | 9 +++ .../service/target/TargetManagerService.java | 3 +- .../target/impl/TargetManagerServiceImpl.java | 61 ++++++++++++++----- 4 files changed, 61 insertions(+), 17 deletions(-) create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/target/TargetManagerDownloadResp.java 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 ac32796a..bf7c6607 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 @@ -2,6 +2,7 @@ package cd.casic.ci.api; import cd.casic.ci.process.dto.req.target.*; +import cd.casic.ci.process.dto.resp.target.TargetManagerDownloadResp; import cd.casic.ci.process.dto.resp.target.TargetManagerResp; import cd.casic.ci.process.dto.resp.target.TargetVersionResp; import cd.casic.ci.process.process.dataObject.base.BaseIdReq; @@ -138,8 +139,8 @@ public class TargetController { } @PostMapping(path="/zipDownload") - public void zipDownload(@RequestBody @Valid BaseIdReq req, HttpServletResponse response){ - targetManagerService.zipDownload(req,response); + public CommonResult zipDownload(@RequestBody @Valid BaseIdReq req, HttpServletResponse response){ + return CommonResult.success(targetManagerService.zipDownload(req,response)); } @PostMapping(path = "/uploadFolder") diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/target/TargetManagerDownloadResp.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/target/TargetManagerDownloadResp.java new file mode 100644 index 00000000..a26acdcd --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/target/TargetManagerDownloadResp.java @@ -0,0 +1,9 @@ +package cd.casic.ci.process.dto.resp.target; + +import lombok.Data; + +@Data +public class TargetManagerDownloadResp { + private String fileName; + private String file; +} 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 2c43bb54..0fe69120 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 @@ -2,6 +2,7 @@ package cd.casic.ci.process.process.service.target; import cd.casic.ci.process.dto.req.target.*; +import cd.casic.ci.process.dto.resp.target.TargetManagerDownloadResp; import cd.casic.ci.process.dto.resp.target.TargetManagerResp; import cd.casic.ci.process.process.dataObject.base.BaseIdReq; import cd.casic.ci.process.process.dataObject.target.TargetManager; @@ -42,5 +43,5 @@ public interface TargetManagerService extends IService { void fileDownload(@Valid BaseIdReq req, HttpServletResponse response); - void zipDownload(@Valid BaseIdReq req, HttpServletResponse response); + TargetManagerDownloadResp zipDownload(@Valid BaseIdReq req, HttpServletResponse response); } 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 67de15ea..f96a1ef2 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 @@ -2,6 +2,7 @@ package cd.casic.ci.process.process.service.target.impl; import cd.casic.ci.process.dto.req.target.*; +import cd.casic.ci.process.dto.resp.target.TargetManagerDownloadResp; import cd.casic.ci.process.dto.resp.target.TargetManagerResp; import cd.casic.ci.process.dto.resp.target.TargetVersionResp; import cd.casic.ci.process.process.converter.TargetConverter; @@ -24,9 +25,13 @@ import cd.casic.framework.tenant.core.service.AdminUserServiceImpl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.Session; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,10 +42,9 @@ import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.UUID; +import java.util.*; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; /** * @author HopeLi @@ -296,7 +300,7 @@ public class TargetManagerServiceImpl extends ServiceImpl wrapper = new QueryWrapper<>(); - wrapper.eq("target_id",req.getId()); - List targetVersionList = targetVersionDao.selectList(wrapper); + // 跳过 host key 检查 + Properties config = new Properties(); + config.put("StrictHostKeyChecking", "no"); + session.setConfig(config); - if (ObjectUtils.isEmpty(targetVersionList)){ - throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"目标版本不存在"); + session.connect(); + ChannelSftp sftp = (ChannelSftp) session.openChannel("sftp"); + sftp.connect(); + //根据targetId查询对应的全部版本信息,获取版本保存地址 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("target_id",req.getId()); + List targetVersionList = targetVersionDao.selectList(wrapper); + + if (ObjectUtils.isEmpty(targetVersionList)){ + throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"目标版本不存在"); + } + + for (TargetVersion targetVersion : targetVersionList) { + InputStream inputStream = sftp.get(targetVersion.getFilePath()); + String fileName = targetVersion.getFileName(); + ZipEntry zipEntry = new ZipEntry(fileName); + zipOutputStream.putNextEntry(zipEntry); + IOUtils.copy(inputStream,zipOutputStream); + zipOutputStream.closeEntry(); + inputStream.close(); + } + } catch (Exception e) { + throw new RuntimeException(e); } - - List filePathList = targetVersionList.stream().map(TargetVersion::getFilePath).toList(); - sftpFileService.downloadFilesAsZip(filePathList,targetManager.getTargetName(),response); + byte[] byteArray = bos.toByteArray(); + String file = Base64.getEncoder().encodeToString(byteArray); + TargetManagerDownloadResp targetManagerDownloadResp = new TargetManagerDownloadResp(); + targetManagerDownloadResp.setFile(file); + targetManagerDownloadResp.setFileName(targetManager.getTargetName()); + return targetManagerDownloadResp; }