JSch简单实现SFTP上传文件到指定服务器

引入依赖:



    com.jcraft
    jsch
    0.1.55

工具类:

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是免费开源的,大家可以自行下载,也可以去我的上传里面下载

亲测有效,大家放心使用!

你可能感兴趣的:(java,JSch,SFTP,上传文件到指定服务器,java,openSSH)