# softhub **Repository Path**: xjh201215/softhub ## Basic Information - **Project Name**: softhub - **Description**: 个人项目,正在开发中,提供常用软件快捷下载功能 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-15 - **Last Updated**: 2026-06-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SoftHub Backend 软件纯净下载站后端 · Spring Boot 3.2 + Java 17 + MyBatis-Plus + MinIO。 > 配套前端:同级目录的 `softhub-web`。 > 表结构与种子数据:见 `src/main/resources/db/migration/`(Flyway,启动时自动跑)。 > API 完整说明:见同级目录 `API.md`,前端文档见 `FRONTEND.md`。 ## 一键启动 ```bash # 1. 启动 MySQL & MinIO docker run -d --name mysql -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=softhub mysql:8.0 docker run -d --name minio -p 9000:9000 -p 9001:9001 \ -e MINIO_ROOT_USER=minioadmin -e MINIO_ROOT_PASSWORD=minioadmin \ minio/minio server /data --console-address ":9001" # 2. 导入表结构(Flyway 启动时会自动跑 src/main/resources/db/migration/,无需手动导入) # 库需要先存在(docker 启动时 -e MYSQL_DATABASE=softhub 即可) # 登录 MinIO 控制台 http://localhost:9001 创建 bucket: softhub-file # 3. 启动应用 mvn spring-boot:run # 4. 打开 API 文档(Knife4j) open http://localhost:8080/api/doc.html ``` ## 目录结构 ``` src/main/java/com/softhub ├── SofthubApplication.java 启动入口 ├── common/ 统一响应、异常 ├── config/ MyBatis/MinIO/Cors/Async/OkHttp ├── controller/ REST 控制器 ├── detector/ 链接探测 + 版本抓取 ├── dto/ 入参 DTO ├── entity/ 数据库 PO ├── job/ 定时任务 ├── mapper/ MyBatis Mapper ├── service/ 业务层 └── vo/ 出参 VO ``` ## 关键 API | Method | Path | 说明 | | --- | --- | --- | | GET | `/api/v1/resources` | 资源分页 | | POST | `/api/v1/resources` | 添加资源(直链/文件/智能解析) | | GET | `/api/v1/resources/{id}/items` | 历史下载项 | | POST | `/api/v1/resources/{id}/check` | 重新探测 | | GET | `/api/v1/items/{id}/download` | 智能下载(302/presigned) | | GET | `/api/v1/categories` | 分类树 | | POST/PUT/DELETE | `/api/v1/categories[/{id}]` | 分类增删改 | | GET | `/api/v1/uploaders?keyword=` | 昵称联想 | | GET/PUT | `/api/v1/uploaders/{id}` | 上传者详情/编辑 | | POST | `/api/v1/files/upload` | 服务端上传 | | POST | `/api/v1/download/aria2` | 导出 aria2 脚本 | | POST | `/api/v1/download/txt` | 导出 txt 列表 |