文件部署管理系统

79 阅读9分钟

文件部署管理系统

基于 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

界面功能

  1. Java 后端部署 Tab

    • 支持上传 JAR、ZIP、RAR 文件
    • 自动停止、替换、启动 Java 程序
    • 实时显示部署进度和结果
  2. Nginx 前端部署 Tab

    • 支持上传 ZIP、RAR 文件
    • 可选择是否去除最外层文件夹
    • 自动解压到 Nginx 部署目录
    • 自动重载 Nginx 配置
  3. 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 后端部署流程:

  1. 停止目标目录下的 Java 程序
  2. 上传文件到临时目录
  3. 如果是 ZIP/RAR 文件,解压到配置的目标目录;如果是 JAR 文件,复制到目标目录
  4. 清理临时文件
  5. 启动 Java 程序

Nginx 前端部署流程:

  1. 上传文件到临时目录
  2. 解压 ZIP/RAR 文件到 Nginx 部署目录(可选择去除最外层文件夹)
  3. 清理临时文件
  4. 如果配置了自动重载,则重载 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 后端部署

  1. 切换到"Java 后端部署"Tab
  2. 选择或拖拽 JAR/ZIP/RAR 文件
  3. 点击"开始部署"
  4. 系统会自动:
    • 停止目标目录下的 Java 程序
    • 解压/复制文件到目标目录
    • 启动 Java 程序

Nginx 前端部署

  1. 切换到"Nginx 前端部署"Tab
  2. 选择是否去除最外层文件夹(如果 ZIP/RAR 中只有一个文件夹)
  3. 选择或拖拽 ZIP/RAR 文件
  4. 点击"开始部署"
  5. 系统会自动:
    • 解压文件到 Nginx 部署目录
    • 重载 Nginx 配置(如果配置了)

Nginx 配置管理

  1. 切换到"Nginx 配置"Tab
  2. 点击"加载配置"读取当前配置文件
  3. 在编辑器中修改配置
  4. 点击"测试配置"检查语法
  5. 点击"保存配置"保存修改
  6. 点击"重载配置"应用配置

注意事项

文件管理

  • 默认文件上传大小限制为 500MB,可在配置文件中修改
  • 文件存储路径建议在生产环境中使用绝对路径
  • 文件按日期自动分目录存储,格式:yyyy/MM/dd
  • 文件名使用 UUID 生成,避免文件名冲突

Java 部署功能

  • 进程管理权限:需要足够的系统权限来停止和启动进程
  • Windows 系统:使用 tasklisttaskkill 命令,需要相应权限
  • Linux 系统:使用 pgrepkill 命令,需要相应权限
  • 启动命令配置:确保 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.zipdist/index.html, dist/css/, dist/js/
    • 去除外层后:nginx/index.html, nginx/css/, nginx/js/

常见问题

Q: 部署后 Java 程序没有启动?

A: 检查以下几点:

  1. 启动命令配置是否正确
  2. 工作目录权限是否足够
  3. 查看 deploy.log 日志文件
  4. 检查进程检测逻辑是否正确

Q: Nginx 配置重载失败?

A: 检查以下几点:

  1. Nginx 是否正在运行
  2. Nginx 可执行文件路径是否正确
  3. 配置文件路径是否正确
  4. logs 目录是否存在
  5. 查看日志中的详细错误信息

Q: RAR 文件解压失败?

A: 可能原因:

  1. 文件是 RAR5 格式(不支持),请转换为 RAR4 或使用 ZIP 格式
  2. 文件已损坏
  3. 文件需要密码(不支持加密 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…