一、摘要(本系列汇总说明)
- 总纲
FTP、SFTP上传下传、进度监控、断点续传、连接池封装JAVA一网打尽(一)
FTP、SFTP上传下传、进度监控、断点续传、连接池封装JAVA一网打尽(二)
FTP、SFTP上传下传、进度监控、断点续传、连接池封装JAVA一网打尽(三)
FTP、SFTP上传下传、进度监控、断点续传、连接池封装JAVA一网打尽(四)
FTP、SFTP上传下传、进度监控、断点续传、连接池封装JAVA一网打尽(五)
FTP、SFTP上传下传、进度监控、断点续传、连接池封装JAVA一网打尽(六)
- 篇章内容说明
第一篇:基础篇,讲FTP常规上传下载实现、SFTP常规上传下载实现、单元测试类
第二篇:FTP高级篇,讲FTP上传进度监控、断点续传,FTP下载进度监控、断点续传
第三篇:SFTP高级篇,讲SFTP上传进度监控、断点续传,SFTP下载进度监控、断点续传
第四篇:FTP进阶篇,讲FTP池化处理(连接池封装)
第五篇:SFTP进阶篇,讲SFTP池化处理(连接池封装)
第六篇:汇总篇,包含前面1~5篇所有内容,且增加更高级的相关知识点
- 本篇
本文是SFTP高级篇,讲SFTP上传进度监控、断点续传,SFTP下载进度监控、断点续传
二、环境
- SpringBoot 2.7.18 官方下载地址:SpringBoot 2.7.18
- commons-net-3.10.0.jar 官方下载地址:commons-net-3.10.0.jar
- commons-pool2-2.12.0.jar 官方下载地址:commons-pool2-2.12.0.jar
- jsch-0.1.55.jar 官方下载地址:jsch-0.1.55.jar
- Oracle JDK8u202(Oracle JDK8最后一个非商业版本) 下载地址:Oracle JDK8u202
- FileZilla Client 官方下载地址:FileZilla Client
注意:
- (特别是MacOS用户)FileZilla有MacOS版本,下载客户端是下Client,不是Server(注意一下名字,不要下错了)。
三、POM依赖
该系列文章通用,几篇FTP文章的pom文件都一样
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>person.brickman</groupId>
<artifactId>ftp</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<httpclient.version>4.5.14</httpclient.version>
<!-- 工具 -->
<lombok.version>1.18.32</lombok.version>
<commons-logging.version>1.3.1</commons-logging.version>
<commons-lang3.version>3.14.0</commons-lang3.version>
<commons-io.version>2.15.1</commons-io.version>
<commons-configuration.version>1.10</commons-configuration.version>
<commons-net.version>3.10.0</commons-net.version>
<commons-pool2.version>2.12.0</commons-pool2.version>
<jsch.version>0.1.55</jsch.version>
<!-- <sshd.version>2.12.1</sshd.version>-->
<!-- 2.20.1 2.22.2 3.0.0-M2 3.2.5 -->
<maven-surefire-plugin.version>3.2.5</maven-surefire-plugin.version>
<!-- 3.0.1 2.4 -->
<maven-source-plugin.version>3.0.1</maven-source-plugin.version>
<!--忽略本包测试-->
<maven.test.skip>false</maven.test.skip>
<skipTests>false</skipTests>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- 工具 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>${commons-net.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>${commons-logging.version}</version>
</dependency>
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>${jsch.version}</version>
</dependency>
<!-- 测试相关 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${maven-source-plugin.version}</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<executions>
<execution>
<id>deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration><!-- 跳过失败的单元测试 -->
<testFailureIgnore>false</testFailureIgnore>
<skipTests>${skipTests}</skipTests>
<argLine>${junit.test.params} -Xmx512m -XX:MaxPermSize=256m</argLine>
</configuration>
</plugin>
</plugins>
</build>
</project>
四、实现类
1、(常量)接口类:FtpKeyValue
接口类,读者觉得常量类更顺眼也可以改(阿里原装的)
package person.brickman.ftp.consts;
/**
* alibaba.datax.ftpreader
*
* @author datax
*/
public interface FtpKeyValue {
/**
* FTP 常用键定义
*/
String PROTOCOL = "protocol";
String HOST = "host";
String USERNAME = "username";
String PASSWORD = "password";
String PORT = "port";
String TIMEOUT = "timeout";
String CONNECTPATTERN = "connectPattern";
String PATH = "path";
String MAXTRAVERSALLEVEL = "maxTraversalLevel";
/**
* 默认值定义
*/
int DEFAULT_FTP_PORT = 21;
int DEFAULT_SFTP_PORT = 22;
int DEFAULT_TIMEOUT = 60000;
int DEFAULT_MAX_TRAVERSAL_LEVEL = 100;
String DEFAULT_FTP_CONNECT_PATTERN = "PASV";
String CONTROL_ENCODING = "utf8";
String NO_SUCH_FILE = "no such file";
char C_STAR = '*';
String STAR = "*";
char C_QUESTION = '?';
String QUESTION = "?";
String SLASH = "/";
String DOT = ".";
String DOUBLE_DOT = "..";
}