# 文件管理 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. 硬删除会永久删除文件记录,请谨慎使用