本来是想用
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>
但是下面的更成熟
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.util.Properties;
/**
* @Author : pmdream
* @Description : FtpUtils
* @Date : 2019/7/16
*/
public class FtpUtils {
private static final int SESSSIONTIMEOUT = 30 * 1000;//登录过期时间 30s
private static final int CHANNELTIMEOUT = 60 * 1000;//通信通道过期时间 60s
/**
* 向FTP服务器上传文件
*
* @param ip ip
* @param port FTP服务器端口
* @param username FTP登录账号
* @param password FTP登录密码
* @param filePath 文件全路径 +文件名
* @return 成功返回true,否则返回false
*/
public static boolean SSHSFTP_Upload(String ip, int port, String username, String password,
String filePath) throws Exception {
boolean flag = false;
Session session = null;
JSch jsch = new JSch();
//登录远程服务
try {
if (port <= 0) {
//连接服务器,采用默认端口
session = jsch.getSession(username, ip);
} else {
//采用指定的端口连接服务器
session = jsch.getSession(username, ip, port);
}
//如果服务器连接不上,则抛出异常
if (session == null) {
LogUtils.info("ssh Sftp服务器session is null");
return false;
}
//设置登陆主机的密码
session.setPassword(password);//设置密码
//设置第一次登陆的时候提示,可选值:(ask | yes | no)
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config); // 为Session对象设置properties
//设置登陆超时时间
session.connect(SESSSIONTIMEOUT);
LogUtils.info("远程SFTP服务连接成功");
} catch (Exception e) {
LogUtils.info("远程SFTP服务登录失败" + e.getMessage());
}
Channel channel = null;
//文件上传到服务器
try {
//创建sftp通信通道
channel = (Channel) session.openChannel("sftp");
channel.connect(CHANNELTIMEOUT);
ChannelSftp sftp = (ChannelSftp) channel;
//这里的put(String src, String dst, int mode)上传文件的方法详解:src代表本地要上传的文件路径,dst代表上传到服务器的路径,mode文件传输模式
sftp.put(filePath, "/***/", ChannelSftp.OVERWRITE);
sftp.quit();
return true;
} catch (Exception e) {
LogUtils.info("上传文件到SFTP时异常: " + e.getMessage());
} finally {
//关闭服务
if (channel.isConnected()) {
channel.disconnect();
channel = null;
LogUtils.info("SFTP,Channel已关闭");
}
if (session.isConnected()) {
session.disconnect();
session = null;
LogUtils.info("SFTP,Session服务已关闭");
}
}
return flag;
}
}
可能LogUtils 那地方会有点问题 不过不打紧~改一下就好
当然这个还有更多的功能,上传下载控制流量上传速度等~
就算了~
本次需求是传Excel