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);
        }
    }

}

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


总结

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

目录
相关文章
|
网络协议 C# 文件存储
C# 利用FluentFTP实现FTP上传下载功能
C# 利用FluentFTP实现FTP上传下载功能
410 0
C# 利用FluentFTP实现FTP上传下载功能
|
JavaScript
使用nodejs连接ftp上传下载
使用nodejs连接ftp,进行ftp的操作,包括列表、上传、下载以及速率等。
使用nodejs连接ftp上传下载
|
4月前
|
数据可视化 Linux 程序员
仅需几步就可快速实现SFTP的免密传输
在程序员的日常工作中,通过FTP/SFTP等工具在服务器之间进行文件的交互是一个基操技能,无论是编码开发过程中的跨系统传输文件,还是生产部署过程中的数据索取,熟练掌握这一技能,可以大大的提高开发效率。当然,现在也有很多终端模拟器提供了可视化的文件传输功能,比如XFTP、WINSCP、MobaXterm、Finalshell等等。
60 2
|
4月前
|
网络协议 安全 网络安全
OpenWRT配置SFTP远程文件传输,让数据分享更安全
OpenWRT配置SFTP远程文件传输,让数据分享更安全
110 0
|
9月前
|
API 分布式数据库 数据安全/隐私保护
C/C++ 实现FTP文件上传下载
FTP(文件传输协议)是一种用于在网络上传输文件的标准协议。它属于因特网标准化的协议族之一,为文件的上传、下载和文件管理提供了一种标准化的方法,在Windows系统中操作FTP上传下载可以使用WinINet库,WinINet(Windows Internet)库是 Windows 操作系统中的一个网络 API 库,用于访问 Internet 上的资源。它提供了一组函数,使开发人员能够创建网络应用程序,例如通过 HTTP 协议下载文件,发送 HTTP 请求,处理 cookie 等,本章将通过使用WinInet所提供的接口实现FTP文件上传下载功能,使得用户可以通过代码的方式上传或下载文件与FTP
158 1
C/C++ 实现FTP文件上传下载
|
网络安全 开发工具 数据安全/隐私保护
阿里云搭建FTP服务器,完成文件传输
本文主要使用搭建FTP服务器的系统是ubuntu18.04,租的服务器是阿里云服务器(ecs.t6-c1m1.large)。决定想在服务器上搭建FTP主要是为了方便传输文件,网上方法众多,因此我将我从头到尾搭建FTP并且传输文件的步骤和问题记录在此,方便想尝试的人学习。
阿里云搭建FTP服务器,完成文件传输
|
Shell iOS开发
sftp 基础使用
## 心法:命令前加"l"代表操作远端服务器,命令前不加"l"代表操作本地服务器 - 列举几个常用命令 - 文件下载 ```shell sftp>get [-Ppr] remote [local] ``` 如:get test.txt ./Project/ 将远程当前目录下的文件test.txt下载到本地当前目录的Project文件夹中。 - 文件上传 ```sh
170 0
|
Ubuntu 数据安全/隐私保护
ftp文件上传下载等系列操作
ftp文件上传下载等系列操作
107 0
ftp文件上传下载等系列操作
|
关系型数据库 MySQL 网络安全
部署sftp
部署sftp
|
数据安全/隐私保护
如何通过FTP工具将文件上传到服务器
可以通过几种方式将文件上传到托管服务器。每个托管服务提供商都提供了一些带有文件管理器的托管控制面板工具,因此您可以使用它来上传文件。
如何通过FTP工具将文件上传到服务器