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


相关文章
|
5月前
|
PHP Android开发
android通过http上传文件,服务器端用php写(原创)
android通过http上传文件,服务器端用php写(原创)
53 4
|
5月前
|
Java Linux
Springboot 解决linux服务器下获取不到项目Resources下资源
Springboot 解决linux服务器下获取不到项目Resources下资源
|
5月前
|
缓存 网络协议 数据可视化
WinSCP下载安装并实现远程SSH本地服务器上传文件
WinSCP下载安装并实现远程SSH本地服务器上传文件
152 1
|
2月前
|
Java
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
64 1
|
3月前
|
Java
软件开发常用之SpringBoot文件下载接口编写(下),Vue+SpringBoot文件上传下载预览,服务器默认上传是1M,可以调节,调节文件上传大小写法,图片预览,如何预览后下次还能看到,预览写法
软件开发常用之SpringBoot文件下载接口编写(下),Vue+SpringBoot文件上传下载预览,服务器默认上传是1M,可以调节,调节文件上传大小写法,图片预览,如何预览后下次还能看到,预览写法
|
4月前
|
Java Maven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
267 1
|
4月前
|
存储 数据库连接 数据库
如何使用Python上传文件到FTP服务器
如何使用Python上传文件到FTP服务器
62 1
|
4月前
|
Java 应用服务中间件 网络安全
Spring Boot中的嵌入式服务器配置
Spring Boot中的嵌入式服务器配置
|
4月前
|
前端开发 Java API
Android端通过HttpURLConnection上传文件到服务器
Android端通过HttpURLConnection上传文件到服务器
45 0
|
5月前
|
算法 安全 Java
服务器启动 SpringBoot 后访问特别慢的解决方案
服务器启动 SpringBoot 后访问特别慢的解决方案
109 1

热门文章

最新文章

下一篇
无影云桌面