美文网首页
SftpChannel远程网络文件传输使用

SftpChannel远程网络文件传输使用

作者: 木木子丶 | 来源:发表于2021-02-22 15:39 被阅读0次

前言

众所周知NIO的管道技术可用于我们本地IO流作为缓冲区传输byteBuffer的,但是如果我们远程网络传输则可以使用SftpChannel来实现上传下载等操作

maven
版本可选 0.1.55
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <!-- 不能设置optinoal=true-->
        </dependency>
源码示例

配合Springboot配置参数

package cn.pinming.pmsuite.file.archive.bean;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.io.Serializable;

/**
 * @PROJECT_NAME: 杭州品茗信息技术有限公司
 * @DESCRIPTION:
 * @author: 徐子木
 * @DATE: 2021/2/21 2:51 下午
 */
@Data
@ConfigurationProperties(prefix = "suite.sftp")
public class SftpConfigProperties implements Serializable {


    private String ip = "192.168.10.37";

    private int port =22;

    private String userName = "root";

    private String password = "Pinming9158";

    private int timeOut = 18000000;
}

管理管道流

package cn.pinming.pmsuite.file.archive.sftp;

import cn.hutool.core.util.StrUtil;
import cn.pinming.pmsuite.file.archive.bean.SftpConfigProperties;
import com.jcraft.jsch.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.Properties;

/**
 * @PROJECT_NAME: 杭州品茗信息技术有限公司
 * @DESCRIPTION:
 * @author: 徐子木
 * @DATE: 2021/2/21 3:00 下午
 */
@Slf4j
@Service
public class SftpArchiveService {

    private final SftpConfigProperties sftpConfigProperties;

    public SftpArchiveService(SftpConfigProperties sftpConfigProperties) {
        this.sftpConfigProperties = sftpConfigProperties;
    }
    
    /**
     * @param : 
     * @desc : 获取channel
     * @dete : 2021/2/22 3:33 下午
     * @Return: 
     * @author: 徐子木
     */
    public ChannelSftp getChannel() throws JSchException {
        String ip = sftpConfigProperties.getIp();
        int port = sftpConfigProperties.getPort();
        String userName = sftpConfigProperties.getUserName();
        String password = sftpConfigProperties.getPassword();

        JSch jSch = new JSch();

        Session session = jSch.getSession(userName, ip, port);
        if (StrUtil.isNotBlank(password)) {
            session.setPassword(password);
        }

        Properties properties = new Properties();
        properties.put("StrictHostKeyChecking", "no");
        session.setConfig(properties);

        session.setTimeout(sftpConfigProperties.getTimeOut());
        session.connect();

        Channel channel = session.openChannel("sftp");
        channel.connect();

        log.debug("sftp连接成功 ...ip:{},username:{}", ip, userName);

        return (ChannelSftp) channel;
    }
    
    /**
     * @param : 
     * @desc : 关闭流操作
     * @dete : 2021/2/22 3:33 下午
     * @Return: 
     * @author: 徐子木
     */
    public void closeChannel(ChannelSftp channel) {
        try {
            if (null != channel) {
                channel.disconnect();
            }
            // session其实也可以手动关闭,但是理论上他已经有超时连接了,会自动断开
        } catch (Exception e) {
            e.printStackTrace();
        }
        log.debug("sftp 断开成功");
    }

}

操作上传备份

    @Override
    public void sftpBackUpFile(String srcFile, String destFile) {
        ChannelSftp channel = null;
        try {
            channel = sftpArchiveService.getChannel();
            // TODO 其实可以把公共父目录封装起来会方便许多 例:config.getSftpLocalPath + srcFile

            channel.put(srcFile, destFile, ChannelSftp.OVERWRITE);
            channel.quit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sftpArchiveService.closeChannel(channel);
        }


    }

其他操作,包括下载什么的参考具体api,就不全贴出来了

相关文章

  • SftpChannel远程网络文件传输使用

    前言 众所周知NIO的管道技术可用于我们本地IO流作为缓冲区传输byteBuffer的,但是如果我们远程网络传输则...

  • Mac上传文件到Linux服务器

    1、使用打开终端>>>Shell>>>新建远程连接 2、安全文件传输>>>添加ip

  • TCP.IP

    前言 分层 Telnet 远程登录。 FTP 文件传输协议。 SMTP 简单邮件传送协议。 SNMP 简单网络管理...

  • Linux之 SSH【简】

    ssh(secure shell,安全外壳协议),该协议有两个常用的作用;远程连接协议、远程文件传输协议.协议使用...

  • 详细介绍!Linux 上几种常用的文件传输方式

    ftp ftp 命令使用文件传输协议(File Transfer Protocol, FTP)在本地主机和远程主机...

  • 无法通过ZentermLite上传文件问题的解决

    What 在使用 ZentermLite 进行远程连接CentOS7时出现如下情况: 无法完成文件传输。 Why ...

  • FTP简介

    文件传输协议(File Transfer Protocol),是用于在网络上进行文件传输的一套标准协议,使用客户/...

  • 本地文件上传到linux服务器

    sftp文件传输 使用工具xshell5 连接本地shell登录到远程服务器的sftp sftp root@......

  • 应用层

    利用网络的应用程序有很多,包括web浏览器、电子邮件、远程登录、文件传输、网络管理等。能够让这些应用进行特定通信处...

  • 操作系统(6)——ftp的使用

    1、远程文件传输的概念 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简...

网友评论

      本文标题:SftpChannel远程网络文件传输使用

      本文链接:https://www.haomeiwen.com/subject/mkckfltx.html