test-file-upload.md 2.5 KB

文件上传和下载功能测试

环境配置

在项目根目录创建 .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

请求示例:

curl -X POST http://localhost:3000/file/upload \
  -F "file=@/path/to/your/file.jpg"

响应示例:

{
  "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

请求示例:

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. 启动应用:

    pnpm run start:dev
    
  2. 上传文件:

    curl -X POST http://localhost:3000/file/upload \
    -F "file=@test.jpg"
    
  3. 使用返回的fileId访问文件:

    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类型
  • 浏览器兼容: 支持浏览器直接预览和下载
  • 环境配置: 服务器地址可通过环境变量配置