328 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			328 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 文件管理 API 文档
 | ||
| 
 | ||
| ## 概述
 | ||
| 
 | ||
| 文件管理模块提供对 `yz_files` 表的完整 CRUD 操作,支持文件信息的管理、搜索和统计功能。
 | ||
| 
 | ||
| ## 数据库表结构
 | ||
| 
 | ||
| ```sql
 | ||
| CREATE TABLE yz_files (
 | ||
|     id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '文件ID',
 | ||
|     tenant_id VARCHAR(64) NOT NULL COMMENT '租户ID',
 | ||
|     
 | ||
|     -- 文件基础信息
 | ||
|     file_name VARCHAR(255) NOT NULL COMMENT '文件名称',
 | ||
|     original_name VARCHAR(255) NOT NULL COMMENT '原始文件名',
 | ||
|     file_path VARCHAR(500) NOT NULL COMMENT '文件存储路径',
 | ||
|     file_url VARCHAR(500) COMMENT '文件访问URL',
 | ||
|     file_size BIGINT NOT NULL DEFAULT 0 COMMENT '文件大小(字节)',
 | ||
|     file_type VARCHAR(50) NOT NULL COMMENT '文件类型',
 | ||
|     file_ext VARCHAR(20) NOT NULL COMMENT '文件扩展名',
 | ||
|     
 | ||
|     -- 分类信息
 | ||
|     category VARCHAR(100) NOT NULL COMMENT '文件分类',
 | ||
|     sub_category VARCHAR(100) COMMENT '子分类',
 | ||
|     
 | ||
|     -- 状态信息
 | ||
|     status TINYINT DEFAULT 1 COMMENT '状态(1:正常, 0:删除)',
 | ||
|     is_public TINYINT DEFAULT 0 COMMENT '是否公开(1:是, 0:否)',
 | ||
|     
 | ||
|     -- 上传信息
 | ||
|     upload_by VARCHAR(100) NOT NULL COMMENT '上传人',
 | ||
|     upload_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
 | ||
|     
 | ||
|     -- 索引
 | ||
|     INDEX idx_tenant (tenant_id),
 | ||
|     INDEX idx_category (category),
 | ||
|     INDEX idx_upload_time (upload_time),
 | ||
|     INDEX idx_status (status)
 | ||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表';
 | ||
| ```
 | ||
| 
 | ||
| ## API 接口列表
 | ||
| 
 | ||
| ### 1. 获取所有文件信息
 | ||
| 
 | ||
| **GET** `/api/files`
 | ||
| 
 | ||
| **认证方式**: JWT认证
 | ||
| 
 | ||
| **参数**: 无
 | ||
| 
 | ||
| **响应**:
 | ||
| ```json
 | ||
| {
 | ||
|     "success": true,
 | ||
|     "message": "获取成功",
 | ||
|     "data": [
 | ||
|         {
 | ||
|             "id": 1,
 | ||
|             "tenant_id": "default",
 | ||
|             "user_id": 1,
 | ||
|             "file_name": "example.pdf",
 | ||
|             "original_name": "example.pdf",
 | ||
|             "file_path": "/uploads/2024/01/01/example.pdf",
 | ||
|             "file_url": "http://example.com/uploads/2024/01/01/example.pdf",
 | ||
|             "file_size": 1024,
 | ||
|             "file_type": "application/pdf",
 | ||
|             "file_ext": "pdf",
 | ||
|             "category": "文档",
 | ||
|             "sub_category": "PDF",
 | ||
|             "status": 1,
 | ||
|             "is_public": 0,
 | ||
|             "upload_by": "admin",
 | ||
|             "upload_time": "2024-01-01T10:00:00Z"
 | ||
|         }
 | ||
|     ]
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| ### 2. 获取当前用户的文件列表
 | ||
| 
 | ||
| **GET** `/api/files/my`
 | ||
| 
 | ||
| **认证方式**: JWT认证
 | ||
| 
 | ||
| **参数**: 无
 | ||
| 
 | ||
| **说明**: 通过JWT token自动获取当前登录用户的文件列表
 | ||
| 
 | ||
| **响应**:
 | ||
| ```json
 | ||
| {
 | ||
|     "success": true,
 | ||
|     "message": "获取成功",
 | ||
|     "data": [
 | ||
|         {
 | ||
|             "id": 1,
 | ||
|             "tenant_id": "default",
 | ||
|             "user_id": 1,
 | ||
|             "file_name": "example.pdf",
 | ||
|             "original_name": "example.pdf",
 | ||
|             "file_path": "/uploads/2024/01/01/example.pdf",
 | ||
|             "file_url": "http://example.com/uploads/2024/01/01/example.pdf",
 | ||
|             "file_size": 1024,
 | ||
|             "file_type": "application/pdf",
 | ||
|             "file_ext": "pdf",
 | ||
|             "category": "文档",
 | ||
|             "sub_category": "PDF",
 | ||
|             "status": 1,
 | ||
|             "is_public": 0,
 | ||
|             "upload_by": "admin",
 | ||
|             "upload_time": "2024-01-01T10:00:00Z"
 | ||
|         }
 | ||
|     ]
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| ### 2. 根据ID获取文件信息
 | ||
| 
 | ||
| **GET** `/api/files/:id`
 | ||
| 
 | ||
| **参数**:
 | ||
| - `id` (路径参数): 文件ID
 | ||
| 
 | ||
| **响应**: 同获取所有文件接口
 | ||
| 
 | ||
| ### 3. 创建文件信息
 | ||
| 
 | ||
| **POST** `/api/files`
 | ||
| 
 | ||
| **请求体**:
 | ||
| ```json
 | ||
| {
 | ||
|     "tenant_id": "tenant-001",
 | ||
|     "file_name": "new-file.txt",
 | ||
|     "original_name": "原始文件.txt",
 | ||
|     "file_path": "/uploads/tenant-001/new-file.txt",
 | ||
|     "file_url": "http://localhost:8080/uploads/tenant-001/new-file.txt",
 | ||
|     "file_size": 1024,
 | ||
|     "file_type": "text/plain",
 | ||
|     "file_ext": "txt",
 | ||
|     "category": "文本",
 | ||
|     "sub_category": "TXT",
 | ||
|     "status": 1,
 | ||
|     "is_public": 0,
 | ||
|     "upload_by": "admin"
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| **响应**:
 | ||
| ```json
 | ||
| {
 | ||
|     "success": true,
 | ||
|     "message": "创建文件成功",
 | ||
|     "data": {
 | ||
|         "id": 2,
 | ||
|         ... // 创建的文件信息
 | ||
|     }
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| ### 4. 更新文件信息
 | ||
| 
 | ||
| **PUT** `/api/files/:id`
 | ||
| 
 | ||
| **参数**:
 | ||
| - `id` (路径参数): 文件ID
 | ||
| 
 | ||
| **请求体**: 同创建文件接口
 | ||
| 
 | ||
| **响应**: 同创建文件接口
 | ||
| 
 | ||
| ### 5. 删除文件(软删除)
 | ||
| 
 | ||
| **DELETE** `/api/files/:id`
 | ||
| 
 | ||
| **参数**:
 | ||
| - `id` (路径参数): 文件ID
 | ||
| 
 | ||
| **响应**:
 | ||
| ```json
 | ||
| {
 | ||
|     "success": true,
 | ||
|     "message": "删除文件成功"
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| ### 6. 硬删除文件
 | ||
| 
 | ||
| **DELETE** `/api/files/:id/hard`
 | ||
| 
 | ||
| **参数**:
 | ||
| - `id` (路径参数): 文件ID
 | ||
| 
 | ||
| **响应**: 同软删除接口
 | ||
| 
 | ||
| ### 7. 根据租户ID获取文件
 | ||
| 
 | ||
| **GET** `/api/files/tenant?tenant_id=tenant-001`
 | ||
| 
 | ||
| **参数**:
 | ||
| - `tenant_id` (查询参数): 租户ID
 | ||
| 
 | ||
| **响应**: 同获取所有文件接口
 | ||
| 
 | ||
| ### 8. 根据分类获取文件
 | ||
| 
 | ||
| **GET** `/api/files/category?category=文档`
 | ||
| 
 | ||
| **参数**:
 | ||
| - `category` (查询参数): 文件分类
 | ||
| 
 | ||
| **响应**: 同获取所有文件接口
 | ||
| 
 | ||
| ### 9. 根据状态获取文件
 | ||
| 
 | ||
| **GET** `/api/files/status?status=1`
 | ||
| 
 | ||
| **参数**:
 | ||
| - `status` (查询参数): 文件状态 (1:正常, 0:删除)
 | ||
| 
 | ||
| **响应**: 同获取所有文件接口
 | ||
| 
 | ||
| ### 10. 获取文件统计信息
 | ||
| 
 | ||
| **GET** `/api/files/statistics?tenant_id=tenant-001`
 | ||
| 
 | ||
| **参数**:
 | ||
| - `tenant_id` (查询参数): 租户ID
 | ||
| 
 | ||
| **响应**:
 | ||
| ```json
 | ||
| {
 | ||
|     "success": true,
 | ||
|     "message": "获取统计信息成功",
 | ||
|     "data": {
 | ||
|         "total_count": 10,
 | ||
|         "total_size": 10485760,
 | ||
|         "category_stats": [
 | ||
|             {
 | ||
|                 "category": "文档",
 | ||
|                 "count": 5,
 | ||
|                 "size": 5242880
 | ||
|             },
 | ||
|             {
 | ||
|                 "category": "图片",
 | ||
|                 "count": 3,
 | ||
|                 "size": 3145728
 | ||
|             }
 | ||
|         ]
 | ||
|     }
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| ### 11. 搜索文件
 | ||
| 
 | ||
| **GET** `/api/files/search?keyword=文档&tenant_id=tenant-001`
 | ||
| 
 | ||
| **参数**:
 | ||
| - `keyword` (查询参数): 搜索关键词
 | ||
| - `tenant_id` (查询参数): 租户ID
 | ||
| 
 | ||
| **响应**: 同获取所有文件接口
 | ||
| 
 | ||
| ### 12. 公开接口(无需认证)
 | ||
| 
 | ||
| **GET** `/api/files/public`
 | ||
| 
 | ||
| **参数**: 无
 | ||
| 
 | ||
| **响应**: 同获取所有文件接口
 | ||
| 
 | ||
| ## 错误响应
 | ||
| 
 | ||
| 所有接口在发生错误时返回统一的错误格式:
 | ||
| 
 | ||
| ```json
 | ||
| {
 | ||
|     "success": false,
 | ||
|     "message": "错误描述",
 | ||
|     "error": "详细错误信息"
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| ## 状态码说明
 | ||
| 
 | ||
| - `200`: 请求成功
 | ||
| - `400`: 参数错误
 | ||
| - `404`: 资源不存在
 | ||
| - `500`: 服务器内部错误
 | ||
| 
 | ||
| ## 使用示例
 | ||
| 
 | ||
| ### 前端调用示例(JavaScript)
 | ||
| 
 | ||
| ```javascript
 | ||
| // 获取所有文件
 | ||
| const response = await fetch('/api/files');
 | ||
| const result = await response.json();
 | ||
| 
 | ||
| // 创建文件
 | ||
| const newFile = {
 | ||
|     tenant_id: "tenant-001",
 | ||
|     file_name: "example.txt",
 | ||
|     original_name: "示例文件.txt",
 | ||
|     file_path: "/uploads/example.txt",
 | ||
|     file_type: "text/plain",
 | ||
|     file_ext: "txt",
 | ||
|     category: "文档",
 | ||
|     upload_by: "user123"
 | ||
| };
 | ||
| 
 | ||
| const createResponse = await fetch('/api/files', {
 | ||
|     method: 'POST',
 | ||
|     headers: {
 | ||
|         'Content-Type': 'application/json'
 | ||
|     },
 | ||
|     body: JSON.stringify(newFile)
 | ||
| });
 | ||
| ```
 | ||
| 
 | ||
| ## 注意事项
 | ||
| 
 | ||
| 1. 所有需要认证的接口都需要在请求头中包含有效的 JWT Token
 | ||
| 2. 文件上传功能需要配合文件存储服务实现
 | ||
| 3. 软删除只是标记文件状态为删除,实际数据仍然保留
 | ||
| 4. 硬删除会永久删除文件记录,请谨慎使用 |