@Autowired
public SshConfiguration(SshProperties sshProperties) {
this.sshProperties = sshProperties;
}
public ChannelSftp getSftp() throws SftpException {
Session session;
try {
session = new JSch().getSession(sshProperties.getUsername(), sshProperties.getHost(), sshProperties.getPort());
session.setConfig(“StrictHostKeyChecking”, “no”);
session.setPassword(sshProperties.getPassword());
session.connect();
} catch (JSchException e) {
log.error(“ssh connecting " + sshProperties.getUsername() + “@” + sshProperties.getHost() + " failed.”, e);
throw new SftpException();
}
ChannelSftp sftp;
try {
sftp = (ChannelSftp) session.openChannel(“sftp”);
sftp.connect();
} catch (JSchException e) {
log.error(“channel opens fail”, e);
throw new SftpException();
}
return sftp;
}
}
接口类
package com.sduoj.judgeserver.util.sftp;
import java.nio.file.Path;
/**
-
@Author: Song yang Ji
-
@ProjectName: sduoj-judge-server
-
@Version 1.0
-
@Description:
*/
public interface SftpFilesService {
/**
-
@param problemID 题目ID
-
@param local 下载的本地的路径
-
@throws SftpException Sftp 异常
*/
void downloadProblemIOFiles(String problemID, Path local) throws SftpException;
/**
-
@param problemID 题目ID
-
@param testPointID 测试点ID
-
@param local 下载的本地的路径
-
@throws SftpException Sftp 异常
*/
void downloadProblemTestPointIOFiles(String problemID, String testPointID, Path local) throws SftpException;
}
实现类
@Service(“sftpFilesService”)
@Slf4j(topic = “SFTP”)
public class SftpFilesServiceImpl implements SftpFilesService {
EnvironmentConfig environmentConfig;
SshConfiguration sshConfiguration;
@Autowired
public SftpFilesServiceImpl(EnvironmentConfig environmentConfig, SshConfiguration sshConfiguration) {
this.environmentConfig = environmentConfig;
this.sshConfiguration = sshConfiguration;
}
/**
-
@param problemID 题目ID
-
@param local 下载的本地的路径
-
@throws SftpException Sftp 异常
*/
@Override
public void downloadProblemIOFiles(String problemID, Path local) throws SftpException {
// 创建本地文件夹
try {
Files.createDirectory(local);
} catch (IOException e) {
throw new SftpException(“本地文件夹创建失败”);
}
String remoteProblemFiles = sshConfiguration.getSshProperties().getRootDir() + problemID + “/”;
ChannelSftp sftp = sshConfiguration.getSftp();
try {
List list = listFileNamesInDir(sftp, remoteProblemFiles);
for (String filePath : list) {
sftp.get(filePath, local.toString());
}
} catch (com.jcraft.jsch.SftpException e) {
throw new SftpException(e.getMessage());
} finally {
// 注意这里的连接关闭
sftp.disconnect();
try {
sftp.getSession().disconnect();
} catch (JSchException e) {
log.error(“sftp fails to channel get session”);
}
}
}
/**
-
@param problemID 题目ID
-
@param testPointID 测试点ID
-
@param local 下载的本地的路径
-
@throws SftpException Sftp 异常
*/
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
图片转存中…(img-kYTWBaYu-1710823451541)]
[外链图片转存中…(img-qvqRwuhR-1710823451541)]
[外链图片转存中…(img-kKIqfIXQ-1710823451542)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-w4S27dwu-1710823451542)]