文件部署管理系统
基于 SpringBoot 3.2.0 构建的智能文件部署管理系统,提供完整的文件管理、Java 后端部署、Nginx 前端部署和配置管理功能。
技术栈
- Spring Boot: 3.2.0
- Java: 17
- Maven: 项目构建工具
- Lombok: 简化代码
- Commons IO: 文件操作工具
- Apache Commons Compress: ZIP 文件解压
- JunRAR: RAR 文件解压支持
项目结构
src/main/java/com/dkfxfwpt/fileservice/
├── config/ # 配置类
│ ├── FileStorageProperties.java # 文件存储配置
│ ├── DeploymentProperties.java # 部署配置
│ └── TomcatConfig.java # Tomcat配置(大文件上传)
├── controller/ # 控制器层
│ ├── FileController.java # 文件管理接口
│ ├── DeploymentController.java # 部署接口
│ └── NginxConfigController.java # Nginx配置管理接口
├── dto/ # 数据传输对象
│ ├── FileInfo.java
│ ├── FileUploadResponse.java
│ └── DeploymentResponse.java
├── exception/ # 异常处理
│ ├── FileOperationException.java
│ └── GlobalExceptionHandler.java
├── service/ # 服务层
│ ├── FileStorageService.java
│ ├── DeploymentService.java
│ └── impl/
│ ├── FileStorageServiceImpl.java
│ └── DeploymentServiceImpl.java
├── util/ # 工具类
│ ├── FileUtils.java # 文件工具
│ ├── ZipUtils.java # ZIP/RAR解压工具
│ ├── ProcessUtils.java # 进程管理工具
│ └── NginxUtils.java # Nginx管理工具
└── FileServiceApplication.java
功能特性
☕ Java 后端部署功能
- ✅ JAR/ZIP/RAR 文件上传部署
- ✅ ZIP/RAR 文件自动解压到指定目录
- ✅ 自动停止目标目录下的 Java 程序
- ✅ 自动启动 Java 程序
- ✅ 部署过程可视化界面
- ✅ 跨平台进程管理(Windows/Linux)
- ✅ 进程状态检测和日志记录
🌐 Nginx 前端部署功能
- ✅ ZIP/RAR 文件上传部署
- ✅ 自动解压到 Nginx 部署目录
- ✅ 支持去除最外层文件夹选项
- ✅ 自动重载 Nginx 配置(不中断服务)
- ✅ 如果 Nginx 未运行则自动启动
- ✅ 部署过程可视化界面
⚙️ Nginx 配置管理功能
- ✅ 在线编辑 Nginx 配置文件
- ✅ 配置文件语法测试
- ✅ 配置文件保存
- ✅ 配置重载(如果 Nginx 未运行则启动)
- ✅ 实时显示配置文件路径
- ✅ 测试结果显示(成功/失败)
📦 压缩文件支持
- ✅ ZIP 格式(完全支持)
- ✅ RAR 格式(支持 RAR4 及更早版本,不支持 RAR5)
- ✅ 自动识别压缩文件格式
- ✅ 支持解压时去除最外层文件夹
配置说明
在 application.yml 中可以配置:
服务器配置
server:
port: 8333
servlet:
context-path: /api
tomcat:
max-swallow-size: 500MB
connection-timeout: 600000 # 10分钟超时
max-http-form-post-size: 500MB
spring:
servlet:
multipart:
enabled: true
max-file-size: 500MB # 单个文件最大500MB
max-request-size: 500MB # 请求总大小最大500MB
file-size-threshold: 10MB # 文件写入磁盘的阈值
文件存储配置
file:
storage:
root-path: ./uploads # 文件存储根目录
allow-overwrite: false # 是否允许覆盖同名文件
url-prefix: /api/files # 文件访问URL前缀
部署配置
deployment:
extract:
target-dir: ./deploy # ZIP/RAR文件解压目标目录
overwrite: true # 是否覆盖已存在的文件
java:
app-dir: ./deploy # Java程序所在目录(用于检测和停止进程)
start-command: java -jar app.jar # Java程序启动命令
start-wait-time: 10 # Java程序启动等待时间(秒)
stop-wait-time: 30 # 停止程序等待时间(秒)
process-check-interval: 1000 # 进程检测间隔(毫秒)
nginx:
deploy-dir: ./nginx/html # Nginx前端部署目录(静态文件解压到此目录)
executable-path: nginx.exe # Nginx可执行文件路径(Windows: nginx.exe完整路径, Linux: nginx)
config-path: ./nginx/conf/nginx.conf # Nginx配置文件路径
reload-after-deploy: true # 部署后是否重载Nginx配置(reload,不中断服务)
reload-wait-time: 3 # 重载等待时间(秒)
strip-outer-dir: false # 解压时是否去除最外层文件夹(true=去除,false=保留)
Web 界面
访问部署界面:
http://localhost:8333/api/index.html
界面功能
-
Java 后端部署 Tab
- 支持上传 JAR、ZIP、RAR 文件
- 自动停止、替换、启动 Java 程序
- 实时显示部署进度和结果
-
Nginx 前端部署 Tab
- 支持上传 ZIP、RAR 文件
- 可选择是否去除最外层文件夹
- 自动解压到 Nginx 部署目录
- 自动重载 Nginx 配置
-
Nginx 配置 Tab
- 加载 Nginx 配置文件
- 在线编辑配置文件
- 测试配置语法
- 保存配置
- 重载配置(如果未运行则启动)
API 接口
文件管理接口
1. 上传文件
请求
POST /api/files/upload
Content-Type: multipart/form-data
file: [文件]
响应
{
"code": 200,
"message": "文件上传成功",
"success": true,
"data": {
"fileName": "example.pdf",
"fileSize": 1024,
"contentType": "application/pdf",
"fileUrl": "/api/files/2025/12/01/uuid.pdf",
"filePath": "2025/12/01/uuid.pdf",
"uploadTime": "2025-12-01T15:57:46"
}
}
2. 下载文件
请求
GET /api/files/download/{文件路径}
响应 文件流下载
3. 获取文件信息
请求
GET /api/files/info/{文件路径}
响应
{
"code": 200,
"message": "获取文件信息成功",
"success": true,
"data": {
"fileName": "example.pdf",
"fileSize": 1024,
"contentType": "application/pdf",
"fileUrl": "/api/files/2025/12/01/uuid.pdf",
"filePath": "2025/12/01/uuid.pdf",
"createTime": "2025-12-01T15:57:46",
"lastModifiedTime": "2025-12-01T15:57:46"
}
}
4. 删除文件
请求
DELETE /api/files/delete/{文件路径}
响应
{
"code": 200,
"message": "文件删除成功",
"success": true,
"data": true
}
5. 列出文件列表
请求
GET /api/files/list?directory={目录路径}
响应
{
"code": 200,
"message": "获取文件列表成功",
"success": true,
"data": [...],
"total": 10
}
6. 检查文件是否存在
请求
GET /api/files/exists?path={文件路径}
响应
{
"code": 200,
"message": "检查完成",
"success": true,
"data": true
}
部署接口
7. 部署文件(JAR/ZIP/RAR)
请求
POST /api/deployment/deploy
Content-Type: multipart/form-data
file: [JAR/ZIP/RAR文件]
deployType: java|nginx # 部署类型:java(Java后端)或 nginx(Nginx前端)
stripOuterDir: true|false # 是否去除最外层文件夹(仅Nginx部署有效,可选)
响应
{
"code": 200,
"message": "部署成功",
"success": true,
"data": {
"success": true,
"message": "部署成功",
"fileName": "app.zip",
"fileType": "zip",
"deployDir": "./deploy",
"extracted": true,
"extractedFiles": ["app.jar", "config.yml"],
"processStopped": true,
"processStarted": true,
"deployTime": "2025-12-01T15:57:46"
}
}
Java 后端部署流程:
- 停止目标目录下的 Java 程序
- 上传文件到临时目录
- 如果是 ZIP/RAR 文件,解压到配置的目标目录;如果是 JAR 文件,复制到目标目录
- 清理临时文件
- 启动 Java 程序
Nginx 前端部署流程:
- 上传文件到临时目录
- 解压 ZIP/RAR 文件到 Nginx 部署目录(可选择去除最外层文件夹)
- 清理临时文件
- 如果配置了自动重载,则重载 Nginx 配置(如果 Nginx 未运行则启动)
Nginx 配置管理接口
8. 读取 Nginx 配置
请求
GET /api/nginx-config/read
响应
{
"code": 200,
"message": "读取成功",
"success": true,
"data": {
"content": "nginx配置文件内容...",
"path": "./nginx/conf/nginx.conf",
"absolutePath": "/absolute/path/nginx.conf"
}
}
9. 保存 Nginx 配置
请求
POST /api/nginx-config/save
Content-Type: application/json
{
"content": "nginx配置文件内容..."
}
响应
{
"code": 200,
"message": "保存成功",
"success": true,
"data": {
"path": "./nginx/conf/nginx.conf",
"absolutePath": "/absolute/path/nginx.conf"
}
}
10. 测试 Nginx 配置
请求
POST /api/nginx-config/test
响应
{
"code": 200,
"message": "配置语法正确",
"success": true,
"data": {
"valid": true,
"output": "nginx: configuration file ... test is successful",
"error": ""
}
}
11. 重载 Nginx 配置
请求
POST /api/nginx-config/reload
响应
{
"code": 200,
"message": "Nginx配置重载成功",
"success": true,
"data": {
"action": "重载" // 或 "启动"
}
}
说明:
- 如果 Nginx 未运行,会自动启动 Nginx
- 如果 Nginx 已运行,会重载配置(不中断服务)
运行方式
1. 环境要求
- Java 17+
- Maven 3.6+
- (可选)Nginx(如果使用 Nginx 部署功能)
2. 编译项目
mvn clean package
3. 运行项目
java -jar target/file-service-1.0.0.jar
或使用 Maven 直接运行:
mvn spring-boot:run
4. 访问 Web 界面
http://localhost:8333/api/index.html
使用说明
Java 后端部署
- 切换到"Java 后端部署"Tab
- 选择或拖拽 JAR/ZIP/RAR 文件
- 点击"开始部署"
- 系统会自动:
- 停止目标目录下的 Java 程序
- 解压/复制文件到目标目录
- 启动 Java 程序
Nginx 前端部署
- 切换到"Nginx 前端部署"Tab
- 选择是否去除最外层文件夹(如果 ZIP/RAR 中只有一个文件夹)
- 选择或拖拽 ZIP/RAR 文件
- 点击"开始部署"
- 系统会自动:
- 解压文件到 Nginx 部署目录
- 重载 Nginx 配置(如果配置了)
Nginx 配置管理
- 切换到"Nginx 配置"Tab
- 点击"加载配置"读取当前配置文件
- 在编辑器中修改配置
- 点击"测试配置"检查语法
- 点击"保存配置"保存修改
- 点击"重载配置"应用配置
注意事项
文件管理
- 默认文件上传大小限制为 500MB,可在配置文件中修改
- 文件存储路径建议在生产环境中使用绝对路径
- 文件按日期自动分目录存储,格式:
yyyy/MM/dd - 文件名使用 UUID 生成,避免文件名冲突
Java 部署功能
- 进程管理权限:需要足够的系统权限来停止和启动进程
- Windows 系统:使用
tasklist和taskkill命令,需要相应权限 - Linux 系统:使用
pgrep和kill命令,需要相应权限 - 启动命令配置:确保
deployment.java.start-command配置正确 - 目录权限:确保应用有权限在目标目录创建、写入文件
- 进程检测:系统会自动检测目标目录下运行的 Java 进程
Nginx 部署功能
- Nginx 路径配置:确保
deployment.nginx.executable-path配置正确 - 配置文件路径:确保
deployment.nginx.config-path配置正确 - 部署目录权限:确保应用有权限在 Nginx 部署目录创建、写入文件
- Nginx 运行状态:系统会自动检测 Nginx 是否运行,未运行时会自动启动
RAR 文件支持
- RAR 格式限制:仅支持 RAR4 及更早版本,不支持 RAR5 格式
- RAR5 处理:如果上传 RAR5 格式文件,会提示转换为 RAR4 或使用 ZIP 格式
- 推荐格式:建议使用 ZIP 格式,兼容性更好
去除外层文件夹功能
- 适用场景:当 ZIP/RAR 文件中只有一个最外层文件夹时
- 效果:提取该文件夹内容到部署目录,而不是保留文件夹
- 示例:
- 原结构:
dist.zip→dist/index.html,dist/css/,dist/js/ - 去除外层后:
nginx/index.html,nginx/css/,nginx/js/
- 原结构:
常见问题
Q: 部署后 Java 程序没有启动?
A: 检查以下几点:
- 启动命令配置是否正确
- 工作目录权限是否足够
- 查看
deploy.log日志文件 - 检查进程检测逻辑是否正确
Q: Nginx 配置重载失败?
A: 检查以下几点:
- Nginx 是否正在运行
- Nginx 可执行文件路径是否正确
- 配置文件路径是否正确
- logs 目录是否存在
- 查看日志中的详细错误信息
Q: RAR 文件解压失败?
A: 可能原因:
- 文件是 RAR5 格式(不支持),请转换为 RAR4 或使用 ZIP 格式
- 文件已损坏
- 文件需要密码(不支持加密 RAR)
Q: 文件上传大小限制?
A: 默认限制为 500MB,可在 application.yml 中修改:
spring:
servlet:
multipart:
max-file-size: 500MB
max-request-size: 500MB
更新日志
v1.0.0 (2025-12-01)
- ✅ Java 后端部署功能
- ✅ Nginx 前端部署功能
- ✅ Nginx 配置管理功能
- ✅ ZIP/RAR 文件解压支持
- ✅ 去除外层文件夹功能
- ✅ Web 可视化界面
- ✅ 跨平台进程管理
作者 wz
gitee地址:gitee.com/laydi887/de…