SpringBoot上传文件到远程服务器(二十九)上

简介: SpringBoot上传文件到远程服务器(二十九)上

本章节的代码目录结构如下:


image.png


一. FTP和SSH 实现文件上传和下载公共配置

一. 一 pom.xml 添加依赖

<!--添加hutools工具类-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.5</version>
        </dependency>
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.6</version>
        </dependency>
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.54</version>
        </dependency>


一.二 配置文件进行配置

application.yml 配置文件

server:
  port: 7011
  servlet:
    context-path: /File
# 进行配置
file:
  useftp: true   # 是否使用 ftp, 为false表示使用 ssh上传
  ssh:
    host: 192.168.56.103   #已经配置了 ftp服务
    port: 21
    username: ftpuser  #对应的用户名和密码
    password: ftpuser
    uploadFilePath: /home/ftpuser/   #上传文件的路径
    downloadFilePath: D:/    #下载到哪个文件
spring:
  # 配置thymeleaf的相关信息
  thymeleaf:
    # 开启视图解析
    enabled: true
    #编码格式
    encoding: UTF-8
    #前缀配置
    prefix: classpath:/templates/
    # 后缀配置
    suffix: .html
    #是否使用缓存 开发环境时不设置缓存
    cache: false
    # 格式为 HTML 格式
    mode: HTML5
    # 配置类型
    servlet:
      content-type: text/html
  #配置上传的文件信息
  servlet:
    multipart:
      max-file-size: 100MB   # 服务器端文件大小限制
      max-request-size: 100MB  # 客户端请求文件大小限制
  profiles:
    # 配置谁生效
    active: ftp    # 注意这一个属性,表示哪一个实现被使用到


一.三 用属性类接收 file部分的配置内容

在 pojo 包下,添加配置类 SshFileProperties.java , 用于接收配置的属性

@Data
@Component
@ConfigurationProperties(prefix ="file.ssh" )
public class SshFileProperties {
    private static final String DEFAULT_HOST="127.0.0.1";
    private static final Integer DEFAULT_PORT=22;
    private static final String DEFAULT_USERNAME="";
    private static final String DEFAULT_PASSWORD="";
    private static final String DEFAULT_UPLOAD_FILEPATH="/usr/local/";
    private static final String DEFAULT_DOWNLOAD_FILEPATH="/usr/local/";
    private String host=DEFAULT_HOST;
    private Integer port=DEFAULT_PORT;
    private String username=DEFAULT_USERNAME;
    private String password=DEFAULT_PASSWORD;
    private String uploadFilePath=DEFAULT_UPLOAD_FILEPATH;
    private String downloadFilePath=DEFAULT_DOWNLOAD_FILEPATH;
}


一.四 配置接口

创建接口 FileService.java

public interface FileService {
    /**
     * 上传文件
     * @date 2021/11/5 11:52
     * @author zk_yjl
     * @param file 上传的文件
     * @param path 上传的文件的名称
     * @return String 上传后文件的路径
     */
    default String upload(String dest,String name,File file){
        return dest+name;
    }
    /**
     * 上传文件
     * @date 2021/11/5 11:52
     * @author zk_yjl
     * @param file 上传的文件
     * @param path 上传的文件的名称
     * @return String 上传后文件的路径
     */
    default String pathUpload(String path,File file){
        return path;
    }
    /**
     * 下载文件
     * @date 2021/11/5 11:54
     * @author zk_yjl
     * @param fileName  下载的文件名称
     * @param outFile  下载到的文件
     * @return void
     */
    default void download(String dest,String fileName,File outFile){
    }
    /**
     * 下载文件,以绝对路径进行下载.
     * @date 2021/11/5 11:54
     * @author zk_yjl
     * @param path  下载的文件的路径
     * @param outFile  下载到的文件
     * @return void
     */
    default void pathDownload(String path,File outFile){
    }
}


二. FTP 和 SSH 接口实现

二. 一 FTP 配置

主要是一个工具类 FtpUtil

@Configuration
@Log4j2
public class FtpUtil {
    @Autowired
    private SshFileProperties sshFileProperties;
    @Value("${file.useftp}")
    private Boolean useftp;
    /**
     * 创建连接
     * @date 2021/11/5 17:21
     * @author zk_yjl
     * @param
     * @return org.apache.commons.net.ftp.FTPClient
     */
    public FTPClient createFileClient(){
       if(!useftp){
           return null;
       }
       FTPClient ftpClient=new FTPClient();
       try{
           ftpClient.setControlEncoding("gbk");
           ftpClient.connect(sshFileProperties.getHost(), sshFileProperties.getPort());
           ftpClient.login(sshFileProperties.getUsername(), sshFileProperties.getPassword());
           ftpClient.enterLocalPassiveMode();
           // 设置上传目录
           ftpClient.setBufferSize(1024);
           ftpClient.setConnectTimeout(10 * 1000);
           ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
           return ftpClient;
       }catch (Exception e){
           log.error("创建FTP服务器失败,{}",e);
       }
        return ftpClient;
    }
    /**
     * 关闭连接
     * @date 2021/11/5 17:21
     * @author zk_yjl
     * @param ftpClient
     * @return void
     */
    public void close(FTPClient ftpClient){
        try {
           if(ftpClient!=null){
               ftpClient.disconnect();
           }
        } catch (IOException e) {
            throw new RuntimeException("关闭FTP连接发生异常!", e);
        }
    }
}


二.二 SSH配置

主要是一个配置类 SftpConfig

 、@Configuration
public class SftpConfig {
   @Autowired
   private SshFileProperties sshFileProperties;
   @Value("${file.useftp}")
   private Boolean useftp;
    @Bean
    public Sftp getSftp() {
        if(useftp){
            return null;
        }
        return createSftp(
            sshFileProperties.getHost(), sshFileProperties.getPort(), sshFileProperties.getUsername(), sshFileProperties.getPassword()); }
    @Bean
    public Session getSession() {
        if(useftp){
            return null;
        }
        return createSession(sshFileProperties.getHost(),
                sshFileProperties.getPort(),
                sshFileProperties.getUsername(),
                sshFileProperties.getPassword());
    }
    public static Sftp createSftp(String sshHost, int sshPort, String sshUser, String sshPass) {
        return JschUtil.createSftp(sshHost, sshPort, sshUser, sshPass);
    }
    public static Session createSession(String sshHost, int sshPort, String sshUser, String sshPass) {
        return JschUtil.getSession(sshHost, sshPort, sshUser, sshPass);
    }
}


相关文章
|
6月前
|
PHP Android开发
android通过http上传文件,服务器端用php写(原创)
android通过http上传文件,服务器端用php写(原创)
62 4
|
1月前
|
SQL NoSQL Java
springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作
本文介绍了如何在Spring Boot中操作NoSQL数据库MongoDB,包括在MongoDB官网创建服务器、配置Spring Boot项目、创建实体类、仓库类、服务类和控制器类,以及如何进行测试。
19 1
springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作
|
1月前
SecureCRT 通过xftp命令行上传文件到服务器上
SecureCRT 通过xftp命令行上传文件到服务器上
97 1
|
1月前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
51 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
|
3月前
|
Java
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
83 1
|
4月前
|
Java
软件开发常用之SpringBoot文件下载接口编写(下),Vue+SpringBoot文件上传下载预览,服务器默认上传是1M,可以调节,调节文件上传大小写法,图片预览,如何预览后下次还能看到,预览写法
软件开发常用之SpringBoot文件下载接口编写(下),Vue+SpringBoot文件上传下载预览,服务器默认上传是1M,可以调节,调节文件上传大小写法,图片预览,如何预览后下次还能看到,预览写法
|
5月前
|
Java Maven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
419 1
|
5月前
|
存储 数据库连接 数据库
如何使用Python上传文件到FTP服务器
如何使用Python上传文件到FTP服务器
75 1
|
5月前
|
Java 应用服务中间件 网络安全
Spring Boot中的嵌入式服务器配置
Spring Boot中的嵌入式服务器配置
|
5月前
|
前端开发 Java API
Android端通过HttpURLConnection上传文件到服务器
Android端通过HttpURLConnection上传文件到服务器
70 0