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上传下载功能
460 0
C# 利用FluentFTP实现FTP上传下载功能
|
JavaScript
使用nodejs连接ftp上传下载
使用nodejs连接ftp,进行ftp的操作,包括列表、上传、下载以及速率等。
使用nodejs连接ftp上传下载
|
6月前
|
网络协议 安全 网络安全
OpenWRT配置SFTP远程文件传输,让数据分享更安全
OpenWRT配置SFTP远程文件传输,让数据分享更安全
157 0
|
Shell iOS开发
sftp 基础使用
## 心法:命令前加"l"代表操作远端服务器,命令前不加"l"代表操作本地服务器 - 列举几个常用命令 - 文件下载 ```shell sftp>get [-Ppr] remote [local] ``` 如:get test.txt ./Project/ 将远程当前目录下的文件test.txt下载到本地当前目录的Project文件夹中。 - 文件上传 ```sh
179 0
|
Ubuntu 数据安全/隐私保护
ftp文件上传下载等系列操作
ftp文件上传下载等系列操作
114 0
ftp文件上传下载等系列操作
|
安全 网络安全 C#
c#连接SFTP上传文件
名词解释(百度百科) sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。
1631 0
|
关系型数据库 MySQL 网络安全
部署sftp
部署sftp
|
数据安全/隐私保护
如何通过FTP工具将文件上传到服务器
可以通过几种方式将文件上传到托管服务器。每个托管服务提供商都提供了一些带有文件管理器的托管控制面板工具,因此您可以使用它来上传文件。
如何通过FTP工具将文件上传到服务器
|
Java Windows
FTP服务器上传下载
windows下FTP服务器可以使用3CDaemon,下载后点击FTP服务器设置进行相关设置: 使用jar包坐标如下: <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency> 使用java连接服务器并进行操作,登录FTP后默认在FTP根目录下,如果操作文件需要切换到待操作目录。
1857 0
|
测试技术 Linux 网络安全