From 56ef0b77dc1b005b18e9fe3d0dbbc45a98208e5c Mon Sep 17 00:00:00 2001 From: HopeLi <1278288511@qq.com> Date: Fri, 25 Jul 2025 15:50:46 +0800 Subject: [PATCH] =?UTF-8?q?0725=20ljc=20=20=E4=BF=AE=E6=94=B9sftpClientUti?= =?UTF-8?q?ls=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/module-ci-commons/pom.xml | 10 +++++ .../ci/commons/sftp}/SftpClientUtils.java | 41 +++++++++++-------- .../sftpFile/impl/SftpFileServiceImpl.java | 2 +- 3 files changed, 36 insertions(+), 17 deletions(-) rename modules/{module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/sftpFile => module-ci-commons/src/main/java/cd/casic/ci/commons/sftp}/SftpClientUtils.java (82%) diff --git a/modules/module-ci-commons/pom.xml b/modules/module-ci-commons/pom.xml index 94750763..b6864e65 100644 --- a/modules/module-ci-commons/pom.xml +++ b/modules/module-ci-commons/pom.xml @@ -27,6 +27,16 @@ org.springframework.boot spring-boot-starter-jdbc + + com.jcraft + jsch + + + com.amazonaws + aws-java-sdk-core + 1.12.777 + compile + \ No newline at end of file diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/sftpFile/SftpClientUtils.java b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/sftp/SftpClientUtils.java similarity index 82% rename from modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/sftpFile/SftpClientUtils.java rename to modules/module-ci-commons/src/main/java/cd/casic/ci/commons/sftp/SftpClientUtils.java index a80afd49..f6047917 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/sftpFile/SftpClientUtils.java +++ b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/sftp/SftpClientUtils.java @@ -1,6 +1,5 @@ -package cd.casic.ci.process.process.service.sftpFile; +package cd.casic.ci.commons.sftp; -import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.framework.commons.exception.ServiceException; import com.amazonaws.util.IOUtils; import com.jcraft.jsch.*; @@ -23,7 +22,7 @@ public class SftpClientUtils implements AutoCloseable { private ChannelSftp channelSftp; public SftpClientUtils(String remoteHost, Integer remotePort, String username, - String password, String sshKeyPath) throws JSchException, SftpException, SftpUploadUtil.SftpUploadException { + String password, String sshKeyPath) throws JSchException, SftpException, SftpClientUtils.SftpUploadException { JSch jsch = new JSch(); // 1. 添加身份认证信息 (密码或密钥) @@ -31,13 +30,13 @@ public class SftpClientUtils implements AutoCloseable { // 使用 SSH Key 认证 File sshKeyFile = new File(sshKeyPath); if (!sshKeyFile.exists() || !sshKeyFile.isFile()) { - throw new SftpUploadUtil.SftpUploadException("SSH Key 文件不存在或不是一个有效文件: " + sshKeyPath); + throw new SftpClientUtils.SftpUploadException("SSH Key 文件不存在或不是一个有效文件: " + sshKeyPath); } jsch.addIdentity(sshKeyPath); System.out.println("使用 SSH Key 认证: " + sshKeyPath); } else if (password == null || password.trim().isEmpty()) { // 如果没有提供密码或密钥路径,则认证信息不全 - throw new SftpUploadUtil.SftpUploadException("必须提供密码或 SSH Key 路径进行 SFTP 认证."); + throw new SftpClientUtils.SftpUploadException("必须提供密码或 SSH Key 路径进行 SFTP 认证."); } // 如果提供了密码,将在 getSession 后设置,因为 getSession 需要用户名、主机和端口先建立连接意图 @@ -72,7 +71,7 @@ public class SftpClientUtils implements AutoCloseable { channelSftp = (ChannelSftp) channel; } - public String uploadFile(String localFilePath, String remoteDir, String remoteFileName) throws SftpException, SftpUploadUtil.SftpUploadException, FileNotFoundException { + public String uploadFile(String localFilePath, String remoteDir, String remoteFileName) throws SftpException, SftpClientUtils.SftpUploadException, FileNotFoundException { FileInputStream fis = null; // 检查并切换到远程目录 @@ -89,14 +88,14 @@ public class SftpClientUtils implements AutoCloseable { System.out.println("远程目录创建成功并已切换: " + remoteDir); } catch (SftpException e2) { // 创建目录失败 - throw new SftpUploadUtil.SftpUploadException("远程目录创建失败: " + remoteDir, e2); + throw new SftpClientUtils.SftpUploadException("远程目录创建失败: " + remoteDir, e2); } } // 6. 获取本地文件流 File localFile = new File(localFilePath); if (!localFile.exists() || !localFile.isFile()) { - throw new SftpUploadUtil.SftpUploadException("本地文件不存在或不是一个有效文件: " + localFilePath); + throw new SftpClientUtils.SftpUploadException("本地文件不存在或不是一个有效文件: " + localFilePath); } fis = new FileInputStream(localFile); System.out.println("本地文件流获取成功: " + localFilePath); @@ -113,7 +112,7 @@ public class SftpClientUtils implements AutoCloseable { return remoteDir + "/" + remoteFileName; } - public void downloadFile(String remoteFilePath, OutputStream outputStream) throws SftpException, SftpUploadUtil.SftpUploadException, IOException { + public void downloadFile(String remoteFilePath, OutputStream outputStream) throws SftpException, SftpClientUtils.SftpUploadException, IOException { InputStream inputStream = null; String remoteDir = remoteFilePath.substring(0, remoteFilePath.lastIndexOf('/')); @@ -123,7 +122,7 @@ public class SftpClientUtils implements AutoCloseable { try { channelSftp.cd(remoteDir); } catch (SftpException e) { - throw new SftpUploadUtil.SftpUploadException("切换远程目录失败: " + remoteDir, e); + throw new SftpClientUtils.SftpUploadException("切换远程目录失败: " + remoteDir, e); } // 列出目录内容用于调试 @@ -140,13 +139,13 @@ public class SftpClientUtils implements AutoCloseable { inputStream = channelSftp.get(fileName); if (inputStream == null) { - throw new SftpUploadUtil.SftpUploadException("无法获取远程文件输入流,请检查文件是否存在或被其他进程占用: " + fileName); + throw new SftpClientUtils.SftpUploadException("无法获取远程文件输入流,请检查文件是否存在或被其他进程占用: " + fileName); } IOUtils.copy(inputStream,outputStream); outputStream.flush(); } catch (SftpException e) { - throw new SftpUploadUtil.SftpUploadException("文件下载失败: " + remoteFilePath, e); + throw new SftpClientUtils.SftpUploadException("文件下载失败: " + remoteFilePath, e); } finally { if (inputStream != null) { try { @@ -158,7 +157,7 @@ public class SftpClientUtils implements AutoCloseable { } } - public InputStream downloadFileToStream(String remoteFilePath) throws SftpException, SftpUploadUtil.SftpUploadException { + public InputStream downloadFileToStream(String remoteFilePath) throws SftpException, SftpClientUtils.SftpUploadException { InputStream inputStream = null; String remoteDir = remoteFilePath.substring(0, remoteFilePath.lastIndexOf('/')); @@ -168,7 +167,7 @@ public class SftpClientUtils implements AutoCloseable { try { channelSftp.cd(remoteDir); } catch (SftpException e) { - throw new SftpUploadUtil.SftpUploadException("切换远程目录失败: " + remoteDir, e); + throw new SftpClientUtils.SftpUploadException("切换远程目录失败: " + remoteDir, e); } // 列出目录内容用于调试 @@ -185,12 +184,12 @@ public class SftpClientUtils implements AutoCloseable { inputStream = channelSftp.get(fileName); if (inputStream == null) { - throw new SftpUploadUtil.SftpUploadException("无法获取远程文件输入流,请检查文件是否存在或被其他进程占用: " + fileName); + throw new SftpClientUtils.SftpUploadException("无法获取远程文件输入流,请检查文件是否存在或被其他进程占用: " + fileName); } return inputStream; } catch (SftpException e) { - throw new SftpUploadUtil.SftpUploadException("获取远程文件流失败: " + fileName, e); + throw new SftpClientUtils.SftpUploadException("获取远程文件流失败: " + fileName, e); } @@ -242,6 +241,16 @@ public class SftpClientUtils implements AutoCloseable { } } + // 自定义异常类,用于封装上传过程中的错误 + public static class SftpUploadException extends Exception { + public SftpUploadException(String message) { + super(message); + } + public SftpUploadException(String message, Throwable cause) { + super(message, cause); + } + } + @Override public void close() { if (channelSftp != null) { diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/sftpFile/impl/SftpFileServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/sftpFile/impl/SftpFileServiceImpl.java index 98ec5ee9..a513c8ca 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/sftpFile/impl/SftpFileServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/sftpFile/impl/SftpFileServiceImpl.java @@ -1,7 +1,7 @@ package cd.casic.ci.process.process.service.sftpFile.impl; -import cd.casic.ci.process.process.service.sftpFile.SftpClientUtils; +import cd.casic.ci.commons.sftp.SftpClientUtils; import cd.casic.ci.process.process.service.sftpFile.SftpFileService; import cd.casic.ci.process.properties.TargetFileUploadProperties; import com.amazonaws.util.IOUtils;