# dwarfeng-ftp
**Repository Path**: dwarfeng/dwarfeng-ftp
## Basic Information
- **Project Name**: dwarfeng-ftp
- **Description**: 基于 subgrade 框架的 ftp 处理器
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 1
- **Created**: 2022-01-27
- **Last Updated**: 2026-06-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# dwarfeng-ftp
Dwarfeng(赵扶风)的 JAVA 栈 FTP 服务,基于 `subgrade` 底座开发,在 Apache Commons Net 的 `FTPClient` 基础上做了进一步封装,
目前用于多个个人项目。
---
## 特性
1. Subgrade 架构支持。
2. 文件存在性判断、上传与下载、删除与目录删除。
3. 文件列表、文件名列表与文件描述。
4. 文件重命名、移动、复制与目录清空。
5. 打开文件的输入流/输出流。
6. 自动保持连接与断线重连。
7. 支持通过 `FtpQosService` 在单处理器和多处理器场景中统一访问 FTP 能力。
8. 支持 Spring XML XSD 命名空间配置。
9. `dwarfeng-ftp-api` 模块提供 spring-telqos 运维指令示例。
运行 `dwarfeng-ftp-core/src/test` 下的示例以观察核心特性。
| 示例类名 | 说明 |
|-----------------------------------------------------|---------|
| com.dwarfeng.ftp.node.example.ProcessExample | 流程示例 |
| com.dwarfeng.ftp.node.example.StreamExample | 流的使用示例 |
| com.dwarfeng.ftp.node.example.ListFileExample | 列出文件示例 |
| com.dwarfeng.ftp.node.example.RenameFileExample | 重命名文件示例 |
| com.dwarfeng.ftp.node.example.MoveFileExample | 移动文件示例 |
| com.dwarfeng.ftp.node.example.ClearDirectoryExample | 清空目录示例 |
| com.dwarfeng.ftp.node.example.CopyFileExample | 复制文件示例 |
| com.dwarfeng.ftp.node.example.DescFileExample | 描述文件示例 |
运行 `dwarfeng-ftp-api/src/test` 下的示例以观察 API 扩展特性。
| 示例类名 | 说明 |
|--------------------------------------------------------|------------------------------------|
| com.dwarfeng.ftp.api.integration.example.TelqosExample | Telqos 示例:通过 `ftp` 指令操作 FTP QoS 服务 |
## 文档
该项目的文档位于 [docs](./docs) 目录下,包括:
### wiki
wiki 为项目的开发人员为本项目编写的详细文档,包含不同语言的版本,主要入口为:
1. [简介](docs/wiki/zh-CN/Introduction.md) - 镜像的 `README.md`,与本文件内容基本相同。
2. [目录](docs/wiki/zh-CN/Contents.md) - 文档目录。
## 测试
该项目针对多个 FTP 服务端进行了测试,测试结果如下:
| FTP 服务器类型 | 测试结果 |
|-----------------------|------|
| vsftpd | 测试通过 |
| Windows 10 内置 FTP 服务器 | 测试通过 |
## 安装说明
1. 下载源码。
使用 git 进行源码下载。
```shell
git clone git@github.com:DwArFeng/dwarfeng-ftp.git
```
对于中国用户,可以使用 gitee 进行高速下载。
```shell
git clone git@gitee.com:dwarfeng/dwarfeng-ftp.git
```
2. 项目安装。
进入项目根目录,执行 maven 命令
```shell
mvn clean source:jar install
```
3. 项目引入。
根工程坐标为 `com.dwarfeng:dwarfeng-ftp`。在业务项目中使用时,通常按需要引入具体模块。
如果只需要核心 FTP 能力,在项目的 `pom.xml` 中添加如下依赖:
```xml
com.dwarfeng
dwarfeng-ftp-core
${dwarfeng-ftp.version}
```
如果需要 spring-telqos 运维指令能力,在项目的 `pom.xml` 中添加如下依赖:
```xml
com.dwarfeng
dwarfeng-ftp-api
${dwarfeng-ftp.version}
```
4. enjoy it.
## 如何使用
1. 运行 `dwarfeng-ftp-core/src/test` 下的示例以观察核心特性。
2. 运行 `dwarfeng-ftp-api/src/test` 下的示例以观察 spring-telqos 运维指令特性。
3. 观察项目结构,将其中的配置运用到其它的 subgrade 项目中。
### 单实例模式
加载 `com.dwarfeng.ftp.node.configuration.SingletonConfiguration`,
即可获得单实例模式的 `FtpHandler`、`FtpQosHandler` 与 `FtpQosService`。
在项目的 `application-context-scan.xml` 中追加 `com.dwarfeng.ftp.node.configuration` 包中相应 bean 的扫描,示例如下:
```xml
```
### 多实例模式
不使用包扫描,使用 xml 或者配置类生成 `FtpHandlerImpl` 实例。
在项目的 `bean-definition.xml` 中追加配置,示例如下:
```xml
```
### XSD 配置
可以使用 `dwarfeng-ftp` 命名空间装配 `FtpConfig`、`FtpHandler`、`FtpQosHandler` 与 `FtpQosService`。
在项目的 `application-context-ftp.xml` 中追加配置,示例如下:
```xml
```
`config` 元素可通过 `config-name` 指定 `FtpConfig` 的 bean 名称。
`handler` 元素可通过 `handler-name`、`scheduler-ref`、`config-ref`、`auto-start`
指定处理器 bean 名称、调度器引用、配置引用和是否自动启动。
`qos` 元素可通过 `qos-handler-name`、`qos-service-name`、`sem-ref`
指定 QoS 处理器 bean 名称、QoS 服务 bean 名称和 `ServiceExceptionMapper` 引用。
### 任意数量的实例模式
自行设计 `FtpHandler` 的工厂类,调用相关工厂方法生成 `FtpHandlerImpl` 实例。
需要注意的是:使用者需要自行管理 `FtpHandlerImpl` 实例的生命周期,包括在适合的时机调用 `start` 和 `stop` 方法。