Springboot使用Sftp实现服务器文件上传下载

提示:文章如有错误的地方请指出,以免误人子弟!


提示:以下是本篇文章正文内容,下面案例可供参考

一、导入maven jar包

maven 地址

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>

二、上代码

  1. application.yml (根据自己业务来添加路径地址,用不上的可以删掉,我这里就不删了)
sftp:
  # 服务器地址
  host: 192.168.96.135
  # 端口
  port: 22
  # 账号
  userName: root
  # 密码
  password: wang521
  # 图片的根路径
  basePath: /home/nginx/image
  # 音频的根路径
  audioPath: /home/nginx/audio
  # 视频的根路径
  videoPath: /home/nginx/video
  # channel连接超时时间
  timeout: 30000
  #连接次数
  count: 10
  #休眠时间
  sleepTime: 6000
  #服务器头像地址
  titleImgsPath: http://192.168.96.135:80/image/
  #服务器音频地址
  titleAudiosPath: http://192.168.96.135:80/audio/
  #服务器视频地址
  titleVideosPath: http://192.168.96.135:80/video/
  1. 新建一个实体类,用起来方便的
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;

import java.io.Serializable;

/**
 * @author Mr.Tiger
 * @date 2021/01/07 17:59
 */
@Data
@JsonInclude(value = JsonInclude.Include.NON_NULL)
public class SftpDTO implements Serializable {
   
    /**
     * description: Ip
     */
    private String hostname;
    /**
     * description: 端口
     */
    private Integer port;
    /**
     * description: 服务器用户名
     */
    private String username;
    /**
     * description: 服务器密码
     */
    private String password;
    /**
     * description: 连接超时
     */
    private Integer timeout;
    /**
     * description: 服务器根路径
     */
    private String remoteRootPath;

	public SftpDTO() {
   }
    public SftpDTO(String hostname, Integer port, String username, String password, Integer timeout, String remoteRootPath) {
   
        this.hostname = hostname;
        this.port = port;
        this.username = username;
        this.password = password;
        this.timeout = timeout;
        this.remoteRootPath = remoteRootPath;
    }
}
  1. sftp工具类
    注意:
    这里有个地方需要注意下,单个文件或多个文件上传只需要连接一次 sftp 就好了
import com.jcraft.jsch.*;
import com.wwwh.onlyone.common.entity.userInfo.dto.SftpDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * @author Mr.Tiger
 * @date 2021/01/07 18:17
 */
@Slf4j
@Component
@RefreshScope
public class SftpUtil
{
   
    /**
     * description: count-> 连接超过次数,线程休眠
     */
    @Value("${sftp.count}")
    private long count;
    /**
     * description: sleepTime-> 休眠时间
     */
    @Value("${sftp.sleepTime}")
    private long sleepTime;

    /**
     * description: count1-> 已经连接次数
     */
    private long count1 = 0;

    /**
     * description: 连接sftp服务器
     *
     * @param sftpConfig sftp实体类
     * @return com.jcraft.jsch.ChannelSftp
     * @author Mr.Tiger
     */
    public ChannelSftp connect(SftpDTO sftpConfig) {
   
        ChannelSftp sftp = null;
        try {
   
            JSch jsch = new JSch();
            jsch.getSession(sftpConfig.getUsername(), sftpConfig.getHostname(), sftpConfig.getPort());
            Session sshSession = jsch.getSession(sftpConfig.getUsername(), sftpConfig.getHostname(), sftpConfig.getPort());
            log.info("Session created ... UserName=" + sftpConfig.getUsername() + ";host=" + sftpConfig.getHostname() + ";port=" + sftpConfig.getPort());
            sshSession.setPassword(sftpConfig.getPassword());
            Properties sshConfig = new Properties();
            sshConfig.put("StrictHostKeyChecking", "no");
            sshSession.setConfig(sshConfig);
            sshSession.connect();
            log.info("Session connected ...");
            //协议
            Channel channel = sshSession.openChannel("sftp");
            channel.connect();
            sftp = (ChannelSftp) channel;
            log.info("登录成功");
        } catch (Exception e) {
   
            try {
   
                count1 += 1;
                if (count == count1) {
   
                    throw new RuntimeException(e);
                }
                Thread
Spring Boot是一个用于创建独立的、基于Spring的应用程序的框架,而SFTP(SSH File Transfer Protocol)是一种安全的文件传输协议。结合Spring Boot和SFTP可以实现文件的上传和下载功能。 要使用Spring Boot进行SFTP文件的上传和下载,可以按照以下步骤进行操作: 1. 添加依赖:在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-integration</artifactId> </dependency> <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-sftp</artifactId> </dependency> ``` 2. 配置SFTP连接信息:在`application.properties`或`application.yml`文件中配置SFTP连接信息,包括主机名、端口号、用户名、密码等。 3. 创建SFTP上传和下载的服务类:可以创建一个服务类,使用Spring Integration提供的`SftpOutboundGateway`和`SftpInboundFileSynchronizer`来实现文件的上传和下载。 4. 实现文件上传功能:在服务类中,使用`SftpOutboundGateway`来实现文件的上传。可以通过调用`put`方法将本地文件上传SFTP服务器上。 5. 实现文件下载功能:在服务类中,使用`SftpInboundFileSynchronizer`来实现文件的下载。可以通过调用`synchronizeToLocalDirectory`方法将SFTP服务器上的文件下载到本地目录。 6. 创建Controller:创建一个Controller类,定义上传和下载文件的接口。在接口中调用服务类的方法来实现文件的上传和下载。 以上是使用Spring Boot和SFTP实现文件上传下载的基本步骤。具体的代码实现可以根据实际需求进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值