Q-File API 接口文档

统一文件管理系统 API 说明

认证方式

API Key 认证(开放接口):在请求头中添加 X-API-Key: {your-api-key}

JWT 认证(管理接口):在请求头中添加 Authorization: Bearer {jwt-token}

🔐 管理接口 /api/admin

POST/api/admin/auth/login

管理员登录

Request Body:
{
  "username": "admin",
  "password": "password"
}
Response Example:
{
  "token": "jwt-token-string",
  "user": {
    "id": 1,
    "username": "admin",
    "email": "admin@example.com",
    "status": 1,
    "lastLoginAt": "2024-01-01T00:00:00.000Z"
  }
}
GET/api/admin/auth/meJWT

获取当前登录管理员信息

Response Example:
{
  "id": 1,
  "username": "admin",
  "email": "admin@example.com"
}
GET/api/admin/tenantsJWT

获取租户列表

POST/api/admin/tenantsJWT

创建租户

Request Body:
{
  "name": "My Tenant",
  "storageQuota": 10737418240
}
PUT/api/admin/tenants/{id}JWT

更新租户信息

DELETE/api/admin/tenants/{id}JWT

删除租户

POST/api/admin/tenants/{id}/regenerate-keyJWT

重新生成 API Key

GET/api/admin/groupsJWT

获取所有分组

POST/api/admin/groupsJWT

创建分组

Request Body:
{
  "tenantId": 1,
  "name": "Documents",
  "description": "My documents"
}
PUT/api/admin/groups/{id}JWT

更新分组

DELETE/api/admin/groups/{id}JWT

删除分组

GET/api/admin/tagsJWT

获取所有标签

POST/api/admin/tagsJWT

创建标签

Request Body:
{
  "tenantId": 1,
  "name": "important",
  "color": "#ff0000"
}
PUT/api/admin/tags/{id}JWT

更新标签

DELETE/api/admin/tags/{id}JWT

删除标签

GET/api/admin/filesJWT

搜索文件(管理员)

GET/api/admin/backupsJWT

获取备份列表

POST/api/admin/backupsJWT

手动创建备份

DELETE/api/admin/backups/{id}JWT

删除备份

GET/api/admin/backups/{id}/downloadJWT

下载备份文件

📁 文件接口 /api/v1

GET/api/v1/filesAPI Key

搜索文件列表

Query Parameters:
  • keyword - 搜索关键词
  • groupId - 分组ID
  • tagIds - 标签ID数组
  • minSize - 最小文件大小
  • maxSize - 最大文件大小
  • contentType - 内容类型前缀
  • startTime - 开始时间
  • endTime - 结束时间
  • page - 页码
  • pageSize - 每页数量
  • orderBy - 排序字段
  • orderDirection - 排序方向
POST/api/v1/filesAPI Key

上传新文件

Content-Type: multipart/form-data
Request Body:
file: (binary)
groupId?: string
generateThumbnail?: boolean (true/false)
thumbnailWidth?: number
thumbnailHeight?: number
tags?: JSON string of bigint[]
changeNote?: string
Response Example:
{
  "success": true,
  "file": {
    "id": "123",
    "fileUuid": "uuid-string",
    "fileName": "example.jpg",
    ...
  },
  "downloadUrl": "https://..."
}
GET/api/v1/files/{uuid}API Key

获取文件信息

PUT/api/v1/files/{uuid}API Key

更新文件(新版本)

Content-Type: multipart/form-data
Request Body:
file: (binary)
fileName?: string
contentType?: string
groupId?: bigint
generateThumbnail?: boolean
...
DELETE/api/v1/files/{uuid}API Key

删除文件

GET/api/v1/files/{uuid}/downloadAPI Key (可选)

下载文件

GET/api/v1/files/{uuid}/viewAPI Key (可选)

在线查看原图

GET/api/v1/files/{uuid}/thumbnailAPI Key (可选)

获取文件缩略图(图片)

GET/api/v1/files/{uuid}/versionsAPI Key

获取文件版本历史

POST/api/v1/files/{uuid}/rollback/{versionId}API Key

回滚到指定版本

GET/api/v1/groupsAPI Key

获取租户分组列表

GET/api/v1/groups/{id}API Key

获取分组详情

POST/api/v1/groupsAPI Key

创建分组

PUT/api/v1/groups/{id}API Key

更新分组

DELETE/api/v1/groups/{id}API Key

删除分组

GET/api/v1/tagsAPI Key

获取租户标签列表

GET/api/v1/tags/{id}API Key

获取标签详情

POST/api/v1/tagsAPI Key

创建标签

PUT/api/v1/tags/{id}API Key

更新标签

DELETE/api/v1/tags/{id}API Key

删除标签

📋 数据模型

Tenant 租户
{
  id: BigInt (自增主键)
  name: String
  apiKey: String (唯一)
  isActive: Boolean (默认 true)
  storageQuota: BigInt? (存储配额,字节,null 表示无限制)
  createdAt: DateTime
  updatedAt: DateTime
  deletedAt: DateTime? (软删除)
}
FileGroup 文件分组
{
  id: BigInt
  tenantId: BigInt
  name: String
  description: String?
  createdAt: DateTime
  updatedAt: DateTime
  deletedAt: DateTime?
}
Tag 标签
{
  id: BigInt
  tenantId: BigInt
  name: String
  color: String?
  createdAt: DateTime
  updatedAt: DateTime
  deletedAt: DateTime?
}
File 文件
{
  id: BigInt
  tenantId: BigInt
  fileUuid: String (UUID, 唯一)
  fileName: String
  fileSize: BigInt (字节)
  contentType: String (MIME类型)
  md5Hash: String?
  sha256Hash: String?
  storagePath: String
  groupId: BigInt?
  accessCount: BigInt (默认 0)
  lastAccessAt: DateTime?
  imageWidth: Int? (图片宽度)
  imageHeight: Int? (图片高度)
  hasThumbnail: Int (默认 0)
  thumbnailPath: String?
  thumbnailWidth: Int?
  thumbnailHeight: Int?
  version: Int (默认 1)
  rootFileId: BigInt? (版本根文件)
  createdAt: DateTime
  updatedAt: DateTime
  deletedAt: DateTime?
}
FileVersion 文件版本
{
  id: BigInt
  tenantId: BigInt
  rootFileId: BigInt
  fileId: BigInt
  versionNumber: Int
  changeNote: String?
  createdAt: DateTime
}
Backup 备份
{
  id: BigInt
  backupName: String
  backupPath: String
  backupSize: BigInt
  totalFiles: Int
  totalSize: BigInt
  backupType: String (auto/manual, 默认 auto)
  status: String (pending/running/success/failed, 默认 pending)
  errorMessage: String?
  createdAt: DateTime
  completedAt: DateTime?
}
AdminUser 管理员
{
  id: BigInt
  username: String (唯一)
  passwordHash: String
  email: String?
  isActive: Boolean (默认 true)
  lastLoginAt: DateTime?
  createdAt: DateTime
  updatedAt: DateTime
}

✨ 功能特性

  • 多租户隔离 - 每个租户独立数据
  • 文件分组 - 灵活的平级分组
  • 标签系统 - 支持多标签
  • 版本控制 - 支持文件更新多版本,可回滚
  • 图片自动缩略图生成
  • 自动备份 - 支持定时备份数据库和文件
  • 存储配额限制 - 可对租户设置存储限额
  • 软删除 - 数据可恢复(理论上)