瀏覽代碼

📝 docs(architecture): 更新文件管理相关架构文档

- 完善MinIO组件描述,补充大文件上传和分段上传支持说明
- 添加File相关数据模型接口定义,包括实体、创建DTO和上传策略
- 更新目录结构,增加文件管理相关路由和业务模块
- 补充文件管理服务核心功能说明,包括单文件上传、多部分分段上传等
- 添加文件上传流程图示,展示前端到MinIO的完整上传路径
yourname 2 月之前
父節點
當前提交
056e82c86f
共有 1 個文件被更改,包括 78 次插入2 次删除
  1. 78 2
      docs/architecture.md

+ 78 - 2
docs/architecture.md

@@ -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