# 文件上传和下载功能测试 ## 环境配置 在项目根目录创建 `.env` 文件,添加以下配置: ```env # 服务器配置 SERVER_URL=http://localhost:3000 FILE_PATH=./uploads # 数据库配置 DB_HOST=localhost DB_PORT=3306 DB_USERNAME=root DB_PASSWORD=123456 DB_DATABASE=books PORT=3000 ``` ## 新增功能 ### 1. fileId字段 - 基于文件hash生成的UUID - 用于文件的唯一标识 - 格式:标准UUID格式 ### 2. 文件上传接口 **POST** `/file/upload` **请求示例:** ```bash curl -X POST http://localhost:3000/file/upload \ -F "file=@/path/to/your/file.jpg" ``` **响应示例:** ```json { "success": true, "message": "文件上传成功", "fileId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "url": "http://localhost:3000/file/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890" } ``` ### 3. 文件下载接口 **GET** `/file/download/:fileId` **请求示例:** ```bash curl -X GET http://localhost:3000/file/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890 ``` **功能:** - 根据fileId获取文件 - 自动设置正确的Content-Type - 支持浏览器直接预览 - 支持文件下载 ### 4. 数据库字段 文件表包含以下字段: - `id`: 主键 - `file_id`: 文件唯一标识(UUID) - `file_name`: 文件名称 - `file_type`: 文件类型 - `file_hash`: 文件hash(SHA256) - `file_size`: 文件大小 - `mime_type`: MIME类型 - `storage_path`: 存储路径(相对路径) - `upload_source`: 上传来源 - `original_name`: 原始文件名 - `upload_date`: 上传日期 - `updated_at`: 更新时间 ## 测试步骤 1. 启动应用: ```bash pnpm run start:dev ``` 2. 上传文件: ```bash curl -X POST http://localhost:3000/file/upload \ -F "file=@test.jpg" ``` 3. 使用返回的fileId访问文件: ```bash curl -X GET http://localhost:3000/file/download/[返回的fileId] ``` 4. 在浏览器中访问: ``` http://localhost:3000/file/download/[fileId] ``` ## 环境变量说明 - `SERVER_URL`: 服务器地址,用于生成文件访问URL(默认:http://localhost:3000) - `FILE_PATH`: 文件存储路径(默认:./uploads) - `PORT`: 服务器端口(默认:3000) ## 特性 - **文件去重**: 相同hash的文件不会重复存储 - **唯一标识**: 每个文件都有唯一的fileId - **相对路径**: 使用相对路径存储,便于迁移 - **自动类型检测**: 自动设置正确的MIME类型 - **浏览器兼容**: 支持浏览器直接预览和下载 - **环境配置**: 服务器地址可通过环境变量配置