sftp文件上传下载

简介: 在日常的工作中我们经常遇见使用sftp协议的方式进行文件的上传与下载,为了是我们的工作起来更加的方便,这里使用jsch包,进行上传下载,大大提供我们的工作效率,可以说是nice。当然,sftp 和 ftp 有什么样的区别呢,记住一点即可。sftp是加密传输,ftp不是,就类似于https和https之前的关系一样。

一、直接上干货

1.maven

<!-- sftp -->
<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.54</version>
</dependency>

二、使用步骤

1.引入库

import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.SftpException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;
import java.util.Vector;
import lombok.extern.slf4j.Slf4j;

2.读入数据

@Slf4j
public class SftpUtils {
    /**
     * @param filePath 上传文件路径
     * @param ftpPath  上传到的sftp服务器目录
     * @param username 用户名
     * @param password 密码
     * @param host     ip
     * @param port     端口
     */
    public static void uploadFile(String filePath, String ftpPath, String username, String password, String host, Integer port) {
        FileInputStream input;
        ChannelSftp sftp;
        try {
            JSch jsch = new JSch();
            //获取ssh - session
            com.jcraft.jsch.Session sshSession = jsch.getSession(username, host, port);
            //添加配置密码
            sshSession.setPassword(password);
            Properties sshConfig = new Properties();
            //关闭主机密钥检查
            sshConfig.put("StrictHostKeyChecking", "no");
            sshSession.setConfig(sshConfig);
            //开启session连接
            sshSession.connect();
            //获取sftp通道-并连接
            sftp = (ChannelSftp) sshSession.openChannel("sftp");
            sftp.connect();
            //判断目录是否存在
            try {
                //ls()获取指定目录下的文件列表
                Vector dir = sftp.ls(ftpPath);
            } catch (SftpException e) {
                sftp.mkdir(ftpPath);
            }
            sftp.cd(ftpPath);
            String filename = filePath.substring(filePath.lastIndexOf(File.separator) + 1); //附件名字
            input = new FileInputStream(new File(filePath));
            sftp.put(input, filename);
            input.close();
            sftp.disconnect();
            sshSession.disconnect();
            log.info("==============你的上传成功了===============");
        } catch (Exception e) {
            log.error("==============你的上传成功了===============",e);
        }
    }

    /**
     * @param directory    SFTP服务器的文件路径
     * @param downloadFile SFTP服务器上的文件名
     * @param saveFile     保存到本地路径
     * @param username     用户
     * @param password     密码
     * @param host         ip
     * @param port         端口
     */
    public static void downloadFile(String directory, String downloadFile, String saveFile, String username, String password, String host, Integer port) {
        ChannelSftp sftp;
        try {
            JSch jsch = new JSch();
            //获取ssh - session
            com.jcraft.jsch.Session sshSession = jsch.getSession(username, host, port);
            //设置密码
            sshSession.setPassword(password);
            Properties sshConfig = new Properties();
            //关闭主机密钥检查
            sshConfig.put("StrictHostKeyChecking", "no");
            sshSession.setConfig(sshConfig);
            //开启session连接
            sshSession.connect();
            //获取sftp通道-并连接
            sftp = (ChannelSftp) sshSession.openChannel("sftp");
            sftp.connect();
            if (directory != null && !"".equals(directory)) {
                sftp.cd(directory);
            }
            FileOutputStream output = new FileOutputStream(new File(saveFile));
            sftp.get(downloadFile, output);
            output.close();
            sftp.disconnect();
            sshSession.disconnect();
            log.info("================你的下载成功了!==================");
        } catch (Exception e) {
            log.error("================你的文件下载异常了!================", e);
        }
    }

}

该处使用工具类的方式调用即可,可进行自定义骚加改造。


总结

轮子必须有,将轮子进行到底

目录
相关文章
|
存储 安全 数据安全/隐私保护
Windows部署WebDAV服务并映射到本地盘符实现公网访问本地存储文件
Windows部署WebDAV服务并映射到本地盘符实现公网访问本地存储文件
1194 0
|
Cloud Native Nacos 数据库
2024年最新版Nacos安装教程(史上最详细保姆级教程)
2024年最新版Nacos安装教程(史上最详细保姆级教程)
5150 3
|
7月前
|
人工智能 自然语言处理 测试技术
在PyCharm中提升编程效率:通义灵码(DeepSeek)助手全攻略(新版)
最近小栈在PyCharm中使用了阿里的 通义灵码 插件还不错,本次就再分享一个好用的AI代码助手,让编码过程更加方便!
1917 17
|
存储 Java 开发工具
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
阿里云OSS(Object Storage Service)是一种安全、可靠且成本低廉的云存储服务,支持海量数据存储。用户可通过网络轻松存储和访问各类文件,如文本、图片、音频和视频等。使用OSS后,项目中的文件上传业务无需在服务器本地磁盘存储文件,而是直接上传至OSS,由其管理和保障数据安全。此外,介绍了OSS服务的开通流程、Bucket创建、AccessKey配置及环境变量设置,并提供了Java SDK示例代码,帮助用户快速上手。最后,展示了如何通过自定义starter简化工具类集成,实现便捷的文件上传功能。
2898 7
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
|
API Python
【Azure Developer】【Python 】使用 azure.identity 和 azure.common.credentials 获取Azure AD的Access Token的两种方式
【Azure Developer】【Python 】使用 azure.identity 和 azure.common.credentials 获取Azure AD的Access Token的两种方式
148 0
|
数据采集 运维 监控
服务水平协议(SLA)监控究竟是个啥??
服务水平协议(SLA)监控究竟是个啥??
2280 1
|
负载均衡 算法 Java
Sharding-JDBC如何实现读写分离
通过以上步骤,Sharding-JDBC能够实现数据库的读写分离,从而提高应用程序的读取性能。欢迎关注威哥爱编程,一起学习成长。
263 0
|
安全 前端开发 Android开发
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
鸿蒙开发学习是一项探索性的工作,旨在开发一个全场景分布式操作系统,覆盖所有设备,让消费者能够更方便、更直观地使用各种设备。
1141 6
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
|
存储 安全 网络协议
WebDAV
WebDAV【2月更文挑战第28天】
1787 1
|
C++
npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
5240 0