引入依赖:
<!--sftp文件上传-->
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
工具类:
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.io.OutputStream;
import java.util.Properties;
public class FtpUtils {
/**
* @Author 陈霄
* @Description 利用JSch包实现SFTP上传文件
* @Date 2020-05-27 11:32
**/
public static void sshSftp(String ip, int port, String user, String password, byte[] bytes, String fileName) throws Exception {
Session session;
ChannelSftp channel = null;
JSch jsch = new JSch();
//采用指定的端口连接服务器
session = jsch.getSession(user, ip, port);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
// 为Session对象设置properties
session.setConfig(config);
// 设置超时
session.setTimeout(30000);
//设置登陆主机的密码
session.setPassword(password);//设置密码
//设置登陆超时时间
session.connect();
OutputStream outstream = null;
try {
//创建sftp通信通道
channel = (ChannelSftp) session.openChannel("sftp");
channel.connect();
//以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了
outstream = channel.put(fileName);
outstream.write(bytes);
} catch (Exception e) {
e.printStackTrace();
} finally {
//关流操作
if (outstream != null) {
outstream.flush();
outstream.close();
}
session.disconnect();
if (channel != null) {
channel.disconnect();
}
}
}
}
实现:
@RequestMapping(value = "/upload")
@ResponseBody
public String fileUpload(MultipartFile file) {
String ip = "xxx.xxx.x.xxx";
String user = "administrator";
String psw = "xxxx";
try {
FtpUtils.sshSftp(ip, 22, user, psw, file.getBytes(), file.getOriginalFilename());
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
服务器安装openSSL:
进入OpenSSH文件夹的cmd
依次执行
1)安装sshd服务
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
2)开放22号端口(如果你在windows关闭了防火墙并配置了入站规则可以不执行如下命令,多执行不影响)
netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22
3)配置开机自启sshd
sc config sshd start= auto
4)设置你需要上传的根路径
进入目录OpenSSH文件的 sshd_config_default
解开注释并修改成你需要的文件目录
ChrootDirectory D:\upload
5)执行cmd命令启动openSSH
net start sshd
openSSH是免费开源的,大家可以自行下载,也可以去我的上传里面下载
亲测有效,大家放心使用!