|
|
@@ -160,7 +160,8 @@ graph TD
|
|
|
| Testing Library | 13.x | React组件测试 | 提供组件级测试能力 | 与React项目集成 |
|
|
|
| hono/testing | 内置 | API端点测试 | 验证API功能和集成 | Hono官方测试工具,更好的类型安全 |
|
|
|
| node-cron | latest | 定时任务调度 | Node.js定时任务调度库 | 集成到应用启动流程 |
|
|
|
-| MinIO | latest | 对象存储服务 | 提供可扩展的文件存储解决方案,替代传统文件系统存储 | 通过MinIO客户端SDK集成 |
|
|
|
+| MinIO | latest | 对象存储服务 | 提供可扩展的文件存储解决方案,支持大文件上传和分段上传 | 通过MinIO客户端SDK集成 |
|
|
|
+| MinIO客户端SDK | latest | MinIO API集成 | 提供与MinIO服务的完整交互能力 | 后端服务集成 |
|
|
|
|
|
|
## 数据模型和Schema变更
|
|
|
|
|
|
@@ -228,6 +229,56 @@ export interface UpdateUserDto {
|
|
|
roleIds?: number[];
|
|
|
}
|
|
|
|
|
|
+// 文件实体接口
|
|
|
+export interface File {
|
|
|
+ id: number;
|
|
|
+ name: string;
|
|
|
+ type: string | null;
|
|
|
+ size: number | null;
|
|
|
+ path: string;
|
|
|
+ description: string | null;
|
|
|
+ uploadUserId: number;
|
|
|
+ uploadUser: User;
|
|
|
+ uploadTime: Date;
|
|
|
+ lastUpdated: Date | null;
|
|
|
+ createdAt: Date;
|
|
|
+ updatedAt: Date;
|
|
|
+ fullUrl: Promise<string>; // 异步获取预签名URL
|
|
|
+}
|
|
|
+
|
|
|
+// 文件创建DTO
|
|
|
+export interface CreateFileDto {
|
|
|
+ name: string;
|
|
|
+ type?: string;
|
|
|
+ size?: number;
|
|
|
+ description?: string;
|
|
|
+ uploadUserId: number;
|
|
|
+}
|
|
|
+
|
|
|
+// 多部分上传策略响应
|
|
|
+export interface MultipartUploadPolicy {
|
|
|
+ uploadId: string;
|
|
|
+ bucket: string;
|
|
|
+ key: string;
|
|
|
+ host: string;
|
|
|
+ partUrls: string[];
|
|
|
+}
|
|
|
+
|
|
|
+// 上传策略响应
|
|
|
+export interface UploadPolicy {
|
|
|
+ uploadPolicy: {
|
|
|
+ 'x-amz-algorithm': string;
|
|
|
+ 'x-amz-credential': string;
|
|
|
+ 'x-amz-date': string;
|
|
|
+ 'x-amz-security-token'?: string;
|
|
|
+ policy: string;
|
|
|
+ 'x-amz-signature': string;
|
|
|
+ host: string;
|
|
|
+ key: string;
|
|
|
+ bucket: string;
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
// 分页响应接口
|
|
|
export interface PaginatedResponse<T> {
|
|
|
data: T[];
|
|
|
@@ -277,7 +328,8 @@ src/client/
|
|
|
│ ├── pages/ # 页面组件
|
|
|
│ │ ├── Dashboard.tsx # 仪表板
|
|
|
│ │ ├── Login.tsx # 登录页面
|
|
|
-│ │ └── Users.tsx # 用户管理
|
|
|
+│ │ ├── Users.tsx # 用户管理
|
|
|
+│ │ └── Files.tsx # 文件管理页面
|
|
|
│ ├── routes.tsx # 路由配置
|
|
|
│ └── index.tsx # 管理后台入口
|
|
|
├── home/ # 用户前台应用
|
|
|
@@ -290,6 +342,7 @@ src/client/
|
|
|
├── hooks/ # 共享Hooks
|
|
|
├── lib/ # 工具库
|
|
|
├── utils/ # 工具函数
|
|
|
+│ └── minio.ts # MinIO上传工具
|
|
|
└── api.ts # API客户端配置
|
|
|
```
|
|
|
|
|
|
@@ -317,6 +370,11 @@ src/server/
|
|
|
│ │ ├── [id].ts # 用户详情路由
|
|
|
│ │ └── __tests__/ # 路由测试
|
|
|
│ ├── roles/ # 角色管理路由
|
|
|
+│ ├── files/ # 文件管理路由
|
|
|
+│ │ ├── multipart-policy/ # 多部分上传策略
|
|
|
+│ │ ├── multipart-complete/ # 完成多部分上传
|
|
|
+│ │ ├── [id]/ # 文件操作路由
|
|
|
+│ │ └── upload-policy/ # 上传策略路由
|
|
|
│ └── __integration_tests__/ # 集成测试
|
|
|
├── modules/ # 业务模块层
|
|
|
│ ├── auth/ # 认证业务模块
|
|
|
@@ -326,6 +384,12 @@ src/server/
|
|
|
│ │ ├── user.entity.ts # 用户实体
|
|
|
│ │ ├── user.service.ts # 用户服务
|
|
|
│ │ └── __tests__/ # 用户测试
|
|
|
+│ ├── files/ # 文件业务模块
|
|
|
+│ │ ├── file.entity.ts # 文件实体
|
|
|
+│ │ ├── file.service.ts # 文件服务
|
|
|
+│ │ ├── minio.service.ts # MinIO服务
|
|
|
+│ │ ├── file.schema.ts # 文件验证Schema
|
|
|
+│ │ └── __tests__/ # 文件测试
|
|
|
├── utils/ # 工具层
|
|
|
│ ├── generic-crud.service.ts # 通用CRUD服务
|
|
|
│ ├── generic-crud.routes.ts # 通用CRUD路由
|
|
|
@@ -360,6 +424,12 @@ src/server/
|
|
|
**文件管理服务**:
|
|
|
- **责任**: 提供MinIO对象存储集成,支持文件上传、下载、删除等操作
|
|
|
- **现状**: 已实现完整功能,支持分段上传、预签名URL生成
|
|
|
+- **核心功能**:
|
|
|
+ - 单文件上传(≤5MB)
|
|
|
+ - 多部分分段上传(>5MB大文件)
|
|
|
+ - 预签名URL生成(支持下载和直接访问)
|
|
|
+ - 文件元数据管理(数据库记录)
|
|
|
+ - 文件删除(同时删除MinIO对象和数据库记录)
|
|
|
- **优化重点**: 增强大文件处理能力,优化上传性能
|
|
|
|
|
|
### API文档组件
|
|
|
@@ -381,6 +451,12 @@ graph TD
|
|
|
H --> I[MinIO对象存储]
|
|
|
H --> J[文件实体管理]
|
|
|
|
|
|
+ subgraph "文件上传流程"
|
|
|
+ K[前端上传组件] --> L[获取上传策略]
|
|
|
+ L --> M[直接上传到MinIO]
|
|
|
+ M --> N[更新文件记录]
|
|
|
+ end
|
|
|
+
|
|
|
style A fill:#e1f5fe
|
|
|
style B fill:#f3e5f5
|
|
|
style C fill:#fff3e0
|