2026-07-03 15:58:29 +08:00
|
|
|
|
# 文件管理系统 OpenAPI 接口文档
|
|
|
|
|
|
|
|
|
|
|
|
> Base URL: `http://localhost:8080/api`
|
|
|
|
|
|
>
|
2026-07-10 17:33:33 +08:00
|
|
|
|
> 认证方式: 请求头 `token: <JWT Token>`
|
2026-07-03 15:58:29 +08:00
|
|
|
|
>
|
|
|
|
|
|
> 统一响应格式: `{ "code": 0, "message": "success", "data": ... }`
|
2026-07-10 17:33:33 +08:00
|
|
|
|
>
|
|
|
|
|
|
> ID 类型: 所有 `id`、`folder_id`、`parent_id`、`file_id` 字段均为**字符串类型**(雪花算法生成的64位整数)
|
2026-07-03 15:58:29 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 1. 认证 (Auth)
|
|
|
|
|
|
|
2026-07-10 17:33:33 +08:00
|
|
|
|
### 1.1 用户登录(密码)
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
POST /api/auth/login
|
|
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "username": "admin", "password": "admin123" }
|
|
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"token": "eyJhbGci...",
|
|
|
|
|
|
"username": "admin",
|
|
|
|
|
|
"nickname": "管理员",
|
2026-07-10 17:33:33 +08:00
|
|
|
|
"role": "admin",
|
|
|
|
|
|
"must_change_pwd": false
|
2026-07-03 15:58:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-10 17:33:33 +08:00
|
|
|
|
### 1.2 应用登录(用户名+appId)
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/auth/app-login
|
|
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "username": "admin", "app_id": "your_app_id" }
|
|
|
|
|
|
```
|
|
|
|
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|------|------|------|------|
|
|
|
|
|
|
| username | string | 是 | 用户名 |
|
|
|
|
|
|
| app_id | string | 是 | 开放平台应用ID, 需在后台创建应用并绑定用户 |
|
|
|
|
|
|
|
|
|
|
|
|
> 校验逻辑: appId 存在且启用 → 用户已绑定该应用 → 生成 Token
|
|
|
|
|
|
|
2026-07-03 15:58:29 +08:00
|
|
|
|
### 1.2 用户注册
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/auth/register
|
|
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "username": "user1", "password": "123456", "nickname": "用户1", "email": "user1@example.com" }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 1.3 获取当前用户信息
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/auth/profile
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 1.4 获取当前用户权限
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/auth/permissions
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"roles": [{ "id": 1, "name": "admin", "display_name": "管理员" }],
|
|
|
|
|
|
"permissions": ["file:create", "file:read", "file:update", "file:delete", "file:upload", "share:create"]
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 2. 文件管理 (File)
|
|
|
|
|
|
|
|
|
|
|
|
### 2.1 上传文件(简单上传)
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/file/upload?folder_id=1&storage_policy_id=1
|
|
|
|
|
|
Content-Type: multipart/form-data
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**参数:**
|
|
|
|
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|------|------|------|------|
|
|
|
|
|
|
| file | File | 是 | 文件内容 |
|
2026-07-10 17:33:33 +08:00
|
|
|
|
| folder_id | string | 否 | 目标文件夹ID, "0"=根目录 |
|
2026-07-03 15:58:29 +08:00
|
|
|
|
| storage_policy_id | int | 否 | 存储策略ID, 0=使用默认策略 |
|
|
|
|
|
|
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
2026-07-10 17:33:33 +08:00
|
|
|
|
"id": "170406720000000001",
|
2026-07-03 15:58:29 +08:00
|
|
|
|
"name": "test.txt",
|
|
|
|
|
|
"extension": "txt",
|
2026-07-10 17:33:33 +08:00
|
|
|
|
"folder_id": "0",
|
2026-07-03 15:58:29 +08:00
|
|
|
|
"size": 1024,
|
|
|
|
|
|
"storage_key": "2026/07/02/ab/abcdef123456.txt",
|
|
|
|
|
|
"storage_policy_id": 1,
|
|
|
|
|
|
"mime_type": "text/plain"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2.2 分片上传(大文件/断点续传)
|
|
|
|
|
|
|
|
|
|
|
|
**Step 1: 初始化上传**
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/file/upload/init
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"file_name": "large_video.mp4",
|
|
|
|
|
|
"file_size": 104857600,
|
|
|
|
|
|
"md5": "d41d8cd98f00b204e9800998ecf8427e",
|
2026-07-10 17:33:33 +08:00
|
|
|
|
"folder_id": "0",
|
2026-07-03 15:58:29 +08:00
|
|
|
|
"policy_id": 1
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"upload_id": "uuid-xxx",
|
|
|
|
|
|
"instant": false,
|
|
|
|
|
|
"chunk_size": 5242880,
|
|
|
|
|
|
"total": 20
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
> 如果 `instant: true`, 表示文件已存在(秒传), 直接使用 `file_id`
|
|
|
|
|
|
|
|
|
|
|
|
**Step 2: 逐片上传**
|
|
|
|
|
|
```
|
|
|
|
|
|
PUT /api/file/upload/chunk/:uploadId/:index
|
|
|
|
|
|
Content-Type: multipart/form-data
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
X-Checksum: sha256_of_chunk
|
|
|
|
|
|
```
|
|
|
|
|
|
**表单字段:** `chunk` = 分片二进制数据
|
|
|
|
|
|
|
|
|
|
|
|
**Step 3: 查询进度(断点续传)**
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/file/upload/progress/:uploadId
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"upload_id": "uuid-xxx",
|
|
|
|
|
|
"total_chunks": 20,
|
|
|
|
|
|
"uploaded": 15,
|
|
|
|
|
|
"missing": [15, 16, 17, 18, 19],
|
|
|
|
|
|
"status": 1
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
> `missing` 数组列出未上传的分片索引, 客户端只需重传这些分片
|
|
|
|
|
|
|
|
|
|
|
|
**Step 4: 合并完成**
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/file/upload/merge/:uploadId
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Step 5: 取消上传**
|
|
|
|
|
|
```
|
|
|
|
|
|
DELETE /api/file/upload/:uploadId
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2.3 获取文件信息
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/file/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2.3 根据 fileKey 查询文件信息
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/file/info?key=2026/07/02/ab/abcdef123456.txt
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**参数:**
|
|
|
|
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|------|------|------|------|
|
|
|
|
|
|
| key | string | 是 | 文件的 storage_key |
|
|
|
|
|
|
|
|
|
|
|
|
### 2.4 直接下载文件流
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/file/:id/download
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**响应:** 文件二进制流, Content-Disposition: attachment
|
|
|
|
|
|
|
|
|
|
|
|
### 2.5 获取下载链接
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/file/:id/download-url
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"download_url": "http://localhost:9000/seeyon-fs/2026/07/02/...?X-Amz-..."
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
> MinIO存储返回预签名URL(24小时有效), 本地存储返回API路径
|
|
|
|
|
|
|
|
|
|
|
|
### 2.6 预览文件流
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/file/:id/preview
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**响应:** 文件二进制流, Content-Disposition: inline
|
|
|
|
|
|
|
|
|
|
|
|
### 2.7 获取预览链接
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/file/:id/preview-url
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"preview_url": "http://localhost:9000/seeyon-fs/2026/07/02/..."
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2.8 重命名文件
|
|
|
|
|
|
```
|
|
|
|
|
|
PUT /api/file/:id/rename
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "new_name": "新文件名.txt" }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2.9 移动文件
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/file/:id/move
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "target_folder_id": 5 }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2.10 删除文件(移入回收站)
|
|
|
|
|
|
```
|
|
|
|
|
|
DELETE /api/file/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2.11 恢复文件
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/file/:id/restore
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2.12 永久删除文件
|
|
|
|
|
|
```
|
|
|
|
|
|
DELETE /api/file/:id/permanent
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2.13 搜索文件
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/file/search?keyword=报告
|
2026-07-10 17:33:33 +08:00
|
|
|
|
GET /api/file/search?type=image
|
|
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
2026-07-10 17:33:33 +08:00
|
|
|
|
**参数:**
|
|
|
|
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|------|------|------|------|
|
|
|
|
|
|
| keyword | string | 与type二选一 | 搜索关键词, 支持 `\|` 分隔多关键词(OR匹配) |
|
|
|
|
|
|
| type | string | 与keyword二选一 | 按文件类型搜索 |
|
|
|
|
|
|
|
|
|
|
|
|
**支持的 type 值:**
|
|
|
|
|
|
| type | 匹配扩展名 |
|
|
|
|
|
|
|------|-----------|
|
|
|
|
|
|
| image | jpg, jpeg, png, gif, bmp, webp, svg, ico |
|
|
|
|
|
|
| video | mp4, avi, mov, wmv, flv, mkv, webm |
|
|
|
|
|
|
| audio | mp3, wav, ogg, aac, flac, wma |
|
|
|
|
|
|
| document | pdf, doc, docx, xls, xlsx, ppt, pptx, txt, md, csv |
|
|
|
|
|
|
| archive | zip, rar, 7z, tar, gz, bz2 |
|
|
|
|
|
|
| code | js, ts, py, go, java, c, cpp, h, css, html, sql, json, xml, yaml, yml |
|
|
|
|
|
|
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": "170406720000000007",
|
|
|
|
|
|
"name": "pic.jpg",
|
|
|
|
|
|
"extension": "jpg",
|
|
|
|
|
|
"folder_id": "0",
|
|
|
|
|
|
"size": 6770,
|
|
|
|
|
|
"storage_key": "2026/07/03/be/be2f5ef653f22a3f.jpg",
|
|
|
|
|
|
"storage_policy_id": 8,
|
|
|
|
|
|
"mime_type": "image/jpeg",
|
|
|
|
|
|
"is_favorite": 0,
|
|
|
|
|
|
"download_count": 2,
|
|
|
|
|
|
"version": 1,
|
|
|
|
|
|
"download_url": "/api/file/170406720000000007/download",
|
|
|
|
|
|
"preview_url": "/api/file/170406720000000007/preview",
|
|
|
|
|
|
"created_at": "2026-07-03T18:30:50.496+08:00",
|
|
|
|
|
|
"updated_at": "2026-07-03T22:19:14.916+08:00"
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
> 管理员可搜到所有文件, 非管理员只能搜到自己创建的 + 被授权的。最多返回200条。
|
2026-07-03 15:58:29 +08:00
|
|
|
|
|
|
|
|
|
|
### 2.14 获取回收站列表
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/file/trash
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2.15 查看文件授权列表
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/file/:id/grant
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"file_id": "170406720000000005",
|
|
|
|
|
|
"user_id": 3,
|
|
|
|
|
|
"user_name": "张三",
|
|
|
|
|
|
"perm_level": "read",
|
|
|
|
|
|
"grant_by": 1,
|
|
|
|
|
|
"grant_by_name": "管理员",
|
|
|
|
|
|
"created_at": "2026-07-03 12:00:00"
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 2,
|
|
|
|
|
|
"file_id": "170406720000000005",
|
|
|
|
|
|
"role_id": 5,
|
|
|
|
|
|
"role_name": "内部员工",
|
|
|
|
|
|
"perm_level": "write",
|
|
|
|
|
|
"grant_by": 1,
|
|
|
|
|
|
"grant_by_name": "管理员",
|
|
|
|
|
|
"created_at": "2026-07-03 12:00:00"
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-10 17:33:33 +08:00
|
|
|
|
### 2.16 授权文件权限
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/file/:id/grant
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
**请求体(授权给用户):**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "user_id": 3, "perm_level": "read" }
|
|
|
|
|
|
```
|
|
|
|
|
|
**请求体(授权给角色):**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "role_id": 5, "perm_level": "write" }
|
|
|
|
|
|
```
|
|
|
|
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|------|------|------|------|
|
|
|
|
|
|
| user_id | int | 与role_id二选一 | 授权给指定用户 |
|
|
|
|
|
|
| role_id | int | 与user_id二选一 | 授权给指定角色 |
|
|
|
|
|
|
| perm_level | string | 是 | read / write / admin |
|
|
|
|
|
|
|
|
|
|
|
|
> 需要 `file:grant` 权限。同一文件+同一用户/角色重复授权会更新权限级别。
|
|
|
|
|
|
|
|
|
|
|
|
### 2.17 撤销文件权限
|
|
|
|
|
|
```
|
|
|
|
|
|
DELETE /api/file/:id/grant/:permId
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
> 需要 `file:grant` 权限。只能撤销自己授权的或管理员可撤销任意。
|
|
|
|
|
|
|
2026-07-03 15:58:29 +08:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 3. 文件夹管理 (Folder)
|
|
|
|
|
|
|
|
|
|
|
|
### 3.1 创建文件夹
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/folder
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
2026-07-10 17:33:33 +08:00
|
|
|
|
{ "name": "项目文档", "parent_id": "0", "biz_id": "ext_001" }
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
2026-07-10 17:33:33 +08:00
|
|
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|------|------|------|------|
|
|
|
|
|
|
| name | string | 是 | 文件夹名称 |
|
|
|
|
|
|
| parent_id | string | 否 | 父文件夹ID, "0"=根目录 |
|
|
|
|
|
|
| biz_id | string | 否 | 业务ID, 用于外部系统关联 |
|
|
|
|
|
|
|
2026-07-03 15:58:29 +08:00
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
2026-07-10 17:33:33 +08:00
|
|
|
|
"data": { "id": "170406720000000001", "biz_id": "ext_001", "name": "项目文档", "parent_id": "0", "path": "/170406720000000001/" }
|
2026-07-03 15:58:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-10 17:33:33 +08:00
|
|
|
|
### 3.2 获取文件夹内容(支持分页)
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
2026-07-10 17:33:33 +08:00
|
|
|
|
GET /api/folder/:id/children?page=1&page_size=50
|
|
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
> `:id` 为 `root` 时获取根目录
|
|
|
|
|
|
|
2026-07-10 17:33:33 +08:00
|
|
|
|
**参数:**
|
|
|
|
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|------|------|------|------|
|
|
|
|
|
|
| page | int | 否 | 页码, 默认1 |
|
|
|
|
|
|
| page_size | int | 否 | 每页大小, 默认50, 最大200 |
|
|
|
|
|
|
|
2026-07-03 15:58:29 +08:00
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
2026-07-10 17:33:33 +08:00
|
|
|
|
"folders": [{ "id": "170406720000000002", "name": "子文件夹", "parent_id": "170406720000000001" }],
|
|
|
|
|
|
"files": [{ "id": "170406720000000003", "name": "test.txt", "size": 1024, "storage_key": "2026/...", "storage_policy_id": 8 }],
|
|
|
|
|
|
"total_files": 25,
|
|
|
|
|
|
"total_folders": 3,
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"page_size": 50
|
2026-07-03 15:58:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
2026-07-10 17:33:33 +08:00
|
|
|
|
> 文件夹不分页(通常数量较少), 仅文件分页
|
|
|
|
|
|
|
|
|
|
|
|
### 3.3 根据业务ID获取文件夹
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/folder/by-bizid/:bizid
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": { "id": "170406720000000001", "biz_id": "ext_001", "name": "项目文档", "parent_id": "0", "path": "/170406720000000001/" }
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
2026-07-03 15:58:29 +08:00
|
|
|
|
|
2026-07-10 17:33:33 +08:00
|
|
|
|
### 3.4 重命名文件夹
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
PUT /api/folder/:id/rename
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "new_name": "新名称" }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-10 17:33:33 +08:00
|
|
|
|
### 3.5 删除文件夹
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
DELETE /api/folder/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 4. 分享管理 (Share)
|
|
|
|
|
|
|
|
|
|
|
|
### 4.1 创建分享链接
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/share
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
2026-07-10 17:33:33 +08:00
|
|
|
|
"file_id": "170406720000000001",
|
2026-07-03 15:58:29 +08:00
|
|
|
|
"password": "123456",
|
|
|
|
|
|
"expire_hours": 24,
|
|
|
|
|
|
"max_download": 10
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
2026-07-10 17:33:33 +08:00
|
|
|
|
"id": "170406720000000010",
|
2026-07-03 15:58:29 +08:00
|
|
|
|
"share_code": "a1b2c3d4e5f6g7h8",
|
|
|
|
|
|
"share_url": "/s/a1b2c3d4e5f6g7h8",
|
|
|
|
|
|
"has_password": true,
|
|
|
|
|
|
"expire_at": "2026-07-03T15:00:00Z",
|
|
|
|
|
|
"max_download": 10,
|
|
|
|
|
|
"download_count": 0
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4.2 获取我的分享列表
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/share
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4.3 取消分享
|
|
|
|
|
|
```
|
|
|
|
|
|
DELETE /api/share/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4.4 获取分享信息(公开)
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/s/:code
|
|
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"file": { "name": "test.txt", "size": 1024, "mime_type": "text/plain" },
|
|
|
|
|
|
"has_password": true,
|
|
|
|
|
|
"expire_at": "2026-07-03T15:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4.5 验证分享密码
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/s/:code/verify
|
|
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "password": "123456" }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4.6 下载分享文件
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/s/:code/download?password=123456
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 5. SSO 单点登录
|
|
|
|
|
|
|
|
|
|
|
|
### 5.1 获取SSO提供商列表(公开)
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/sso/providers
|
|
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": [
|
|
|
|
|
|
{ "id": 1, "name": "wechat", "display_name": "企业微信", "type": "oauth2", "icon": "" },
|
|
|
|
|
|
{ "id": 2, "name": "dingtalk", "display_name": "钉钉", "type": "oauth2", "icon": "" }
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5.2 获取SSO授权跳转URL
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/sso/auth/url?provider_id=1
|
|
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"auth_url": "https://open.work.weixin.qq.com/wwopen/sso/qrConnect?...",
|
|
|
|
|
|
"state": "random_csrf_state"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5.3 SSO回调(重定向)
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/sso/callback?provider_id=1&code=AUTH_CODE&state=xxx
|
|
|
|
|
|
```
|
|
|
|
|
|
> 第三方授权后回调, 自动重定向到前端: `/login?sso=success&token=xxx&username=xxx`
|
|
|
|
|
|
|
|
|
|
|
|
### 5.4 SSO回调(JSON)
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/sso/callback
|
|
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "provider_id": 1, "code": "AUTH_CODE" }
|
|
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"token": "eyJhbGci...",
|
|
|
|
|
|
"username": "sso_oauth2_zhangsan",
|
|
|
|
|
|
"nickname": "张三",
|
|
|
|
|
|
"role": "user"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5.5 获取SSO提供商详情(管理员)
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/sso/providers/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5.6 创建SSO提供商(管理员)
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/admin/sso/providers
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "wechat",
|
|
|
|
|
|
"type": "oauth2",
|
|
|
|
|
|
"display_name": "企业微信",
|
|
|
|
|
|
"icon": "https://example.com/wechat.png",
|
|
|
|
|
|
"auto_create": 1,
|
|
|
|
|
|
"default_role": "viewer",
|
|
|
|
|
|
"config": {
|
|
|
|
|
|
"client_id": "ww123456",
|
|
|
|
|
|
"client_secret": "secret_xxx",
|
|
|
|
|
|
"auth_url": "https://open.work.weixin.qq.com/wwopen/sso/qrConnect",
|
|
|
|
|
|
"token_url": "https://qyapi.weixin.qq.com/cgi-bin/gettoken",
|
|
|
|
|
|
"user_info_url": "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo",
|
|
|
|
|
|
"redirect_uri": "http://localhost:8080/api/sso/callback",
|
|
|
|
|
|
"scopes": "snsapi_userinfo"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**支持的 SSO 类型:**
|
|
|
|
|
|
| type | 说明 | 必填 config 字段 |
|
|
|
|
|
|
|------|------|------------------|
|
|
|
|
|
|
| oauth2 | OAuth 2.0 | client_id, client_secret, auth_url, token_url, user_info_url, redirect_uri |
|
|
|
|
|
|
| oidc | OpenID Connect | 同 oauth2 + issuer_url |
|
|
|
|
|
|
| cas | CAS | cas_server_url, redirect_uri |
|
|
|
|
|
|
| ldap | LDAP | ldap_server, ldap_port, ldap_base_dn, ldap_bind_user, ldap_bind_pass |
|
|
|
|
|
|
|
|
|
|
|
|
### 5.7 更新SSO提供商(管理员)
|
|
|
|
|
|
```
|
|
|
|
|
|
PUT /api/admin/sso/providers/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
> 请求体同创建, 字段可选(只传需要修改的字段)
|
|
|
|
|
|
|
|
|
|
|
|
### 5.8 启用/禁用SSO提供商(管理员)
|
|
|
|
|
|
```
|
|
|
|
|
|
PUT /api/admin/sso/providers/:id/toggle
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "status": 1 }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5.9 删除SSO提供商(管理员)
|
|
|
|
|
|
```
|
|
|
|
|
|
DELETE /api/admin/sso/providers/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 6. 用户管理 (Admin)
|
|
|
|
|
|
|
|
|
|
|
|
### 6.1 用户列表
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/users?page=1&size=20
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 6.2 创建用户
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/admin/users
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"username": "user1",
|
|
|
|
|
|
"password": "123456",
|
|
|
|
|
|
"nickname": "用户1",
|
|
|
|
|
|
"email": "user1@example.com",
|
|
|
|
|
|
"role_ids": [2],
|
|
|
|
|
|
"storage_quota": 10737418240
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 6.3 更新用户
|
|
|
|
|
|
```
|
|
|
|
|
|
PUT /api/admin/users/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 6.4 删除用户
|
|
|
|
|
|
```
|
|
|
|
|
|
DELETE /api/admin/users/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 6.5 重置密码
|
|
|
|
|
|
```
|
|
|
|
|
|
PUT /api/admin/users/:id/password
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "password": "new_password" }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 6.6 设置用户角色
|
|
|
|
|
|
```
|
|
|
|
|
|
PUT /api/admin/users/:id/roles
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "role_ids": [1, 2] }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 7. 角色权限管理 (Admin)
|
|
|
|
|
|
|
|
|
|
|
|
### 7.1 角色列表
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/roles
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 7.2 创建角色
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/admin/roles
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "name": "editor", "display_name": "编辑者", "description": "可编辑文件" }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 7.3 更新角色
|
|
|
|
|
|
```
|
|
|
|
|
|
PUT /api/admin/roles/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 7.4 删除角色
|
|
|
|
|
|
```
|
|
|
|
|
|
DELETE /api/admin/roles/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 7.5 设置角色权限
|
|
|
|
|
|
```
|
|
|
|
|
|
PUT /api/admin/roles/:id/permissions
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "permission_ids": [1, 2, 3, 4, 5] }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 7.6 权限列表
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/permissions
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 7.7 创建权限
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/admin/permissions
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "code": "file:download", "name": "下载文件", "resource": "file", "action": "download" }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 7.8 删除权限
|
|
|
|
|
|
```
|
|
|
|
|
|
DELETE /api/admin/permissions/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 8. 存储策略管理 (Admin)
|
|
|
|
|
|
|
|
|
|
|
|
### 8.1 存储策略列表
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/storage-policies
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 8.2 创建存储策略
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/admin/storage-policies
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体 (本地存储):**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "name": "本地存储", "type": "local", "config": { "base_path": "./data/storage" } }
|
|
|
|
|
|
```
|
|
|
|
|
|
**请求体 (MinIO):**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "MinIO存储",
|
|
|
|
|
|
"type": "minio",
|
|
|
|
|
|
"config": {
|
|
|
|
|
|
"endpoint": "localhost:9000",
|
|
|
|
|
|
"access_key": "admin",
|
|
|
|
|
|
"secret_key": "123456789",
|
|
|
|
|
|
"bucket": "seeyon-fs",
|
|
|
|
|
|
"use_ssl": false
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 8.3 更新存储策略
|
|
|
|
|
|
```
|
|
|
|
|
|
PUT /api/admin/storage-policies/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 8.4 删除存储策略
|
|
|
|
|
|
```
|
|
|
|
|
|
DELETE /api/admin/storage-policies/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 9. 组织架构管理 (Admin)
|
|
|
|
|
|
|
|
|
|
|
|
### 9.1 部门列表(树形)
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/departments
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1, "name": "总公司", "code": "HQ", "parent_id": 0,
|
|
|
|
|
|
"children": [
|
|
|
|
|
|
{ "id": 2, "name": "技术部", "code": "TECH", "parent_id": 1 },
|
|
|
|
|
|
{ "id": 3, "name": "产品部", "code": "PM", "parent_id": 1 }
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 9.2 创建部门
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/admin/departments
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "name": "技术部", "code": "TECH", "parent_id": 1, "sort_order": 1 }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 9.3 更新部门
|
|
|
|
|
|
```
|
|
|
|
|
|
PUT /api/admin/departments/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 9.4 删除部门
|
|
|
|
|
|
```
|
|
|
|
|
|
DELETE /api/admin/departments/:id
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 10. 系统设置
|
|
|
|
|
|
|
|
|
|
|
|
### 10.1 健康检查
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /health
|
|
|
|
|
|
```
|
|
|
|
|
|
**响应:** `{ "status": "ok" }`
|
|
|
|
|
|
|
|
|
|
|
|
### 10.2 获取CDN配置(管理员)
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/settings/cdn
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"cdn_host": "http://localhost:3090",
|
|
|
|
|
|
"cdn_path_prefix": "/public",
|
|
|
|
|
|
"local_base_path": "D:/Seeyon/A8/localfile"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 10.3 更新CDN配置(管理员)
|
|
|
|
|
|
```
|
|
|
|
|
|
PUT /api/admin/settings/cdn
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"cdn_host": "http://localhost:3090",
|
|
|
|
|
|
"cdn_path_prefix": "/public"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"message": "CDN配置已更新",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"cdn_host": "http://localhost:3090",
|
|
|
|
|
|
"cdn_path_prefix": "/public",
|
|
|
|
|
|
"example_url": "http://localhost:3090/public/2026/07/02/ab/abcdef.txt"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
> 生成的链接格式: `cdn_host + cdn_path_prefix + / + storage_key`
|
|
|
|
|
|
>
|
|
|
|
|
|
> 例如: `http://localhost:3090/public/2026/07/02/30/306d8f65344c19bd.txt`
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-07-10 17:33:33 +08:00
|
|
|
|
## 11. 监控与日志 (Admin)
|
|
|
|
|
|
|
|
|
|
|
|
### 11.1 流量统计
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/monitor/traffic
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 11.2 最近请求记录
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/monitor/requests?limit=50
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 11.3 存储统计(按策略分组)
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/monitor/storage
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"policies": [
|
|
|
|
|
|
{ "policy_id": 8, "policy_name": "热存储", "file_count": 10, "total_size": 52428800 }
|
|
|
|
|
|
],
|
|
|
|
|
|
"global": {
|
|
|
|
|
|
"total_files": 25,
|
|
|
|
|
|
"total_size": 104857600,
|
|
|
|
|
|
"total_folders": 8,
|
|
|
|
|
|
"total_users": 5
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 11.4 系统运行日志
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/monitor/logs?limit=200
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"total": 156,
|
|
|
|
|
|
"entries": [
|
|
|
|
|
|
{ "time": "2026-07-03T22:33:09+08:00", "level": "INFO", "message": "数据库连接成功\n" },
|
|
|
|
|
|
{ "time": "2026-07-03T22:33:09+08:00", "level": "INFO", "message": "存储引擎初始化完成, 已加载 5 个策略\n" }
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
> 日志级别: INFO / WARN / ERROR
|
|
|
|
|
|
|
|
|
|
|
|
### 11.5 操作日志列表
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/logs?page=1&size=20
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 11.6 操作日志统计
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/logs/stats
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 11.7 清理操作日志
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/admin/logs/clean
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 12. IP黑名单管理 (Admin)
|
|
|
|
|
|
|
|
|
|
|
|
### 12.1 获取黑名单
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/blacklist
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 12.2 设置黑名单(全量替换)
|
|
|
|
|
|
```
|
|
|
|
|
|
PUT /api/admin/blacklist
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "enabled": true, "ips": ["192.168.1.100", "10.0.0.5"] }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 12.3 添加封禁IP
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/admin/blacklist
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "ip": "192.168.1.100" }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 12.4 移除封禁IP
|
|
|
|
|
|
```
|
|
|
|
|
|
DELETE /api/admin/blacklist/:ip
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 13. 备份管理 (Admin)
|
|
|
|
|
|
|
|
|
|
|
|
### 13.1 备份策略列表
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/backup/policies
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 13.2 创建备份策略
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/admin/backup/policies
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 13.3 执行备份
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/admin/backup/execute/:id
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 13.4 备份日志
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/backup/logs
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 13.5 恢复备份
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/admin/backup/restore/:logId
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 14. 存储策略分配 (Admin)
|
|
|
|
|
|
|
|
|
|
|
|
### 14.1 分配列表
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/admin/storage-assignments
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 14.2 为角色分配存储策略
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/admin/storage-assignments/role
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "role_id": 5, "policy_id": 8, "storage_quota": 53687091200, "priority": 10 }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 14.3 为用户分配存储策略
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/admin/storage-assignments/user
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "user_id": 3, "policy_id": 8, "storage_quota": 10737418240 }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 14.4 设置默认存储策略
|
|
|
|
|
|
```
|
|
|
|
|
|
POST /api/admin/storage-assignments/default
|
|
|
|
|
|
token: <token>
|
|
|
|
|
|
```
|
|
|
|
|
|
**请求体:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "policy_id": 8 }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-07-03 15:58:29 +08:00
|
|
|
|
## 权限标识一览
|
|
|
|
|
|
|
|
|
|
|
|
| 权限标识 | 说明 |
|
|
|
|
|
|
|----------|------|
|
|
|
|
|
|
| file:create | 创建文件/文件夹 |
|
|
|
|
|
|
| file:read | 查看文件 |
|
|
|
|
|
|
| file:update | 修改文件 |
|
|
|
|
|
|
| file:delete | 删除文件 |
|
|
|
|
|
|
| file:upload | 上传文件 |
|
2026-07-10 17:33:33 +08:00
|
|
|
|
| file:download | 下载文件 |
|
|
|
|
|
|
| file:grant | 授权文件权限(给其他用户/角色) |
|
2026-07-03 15:58:29 +08:00
|
|
|
|
| share:create | 创建分享 |
|
|
|
|
|
|
| share:manage | 管理分享 |
|
2026-07-10 17:33:33 +08:00
|
|
|
|
| webdav:access | WebDAV访问 |
|
2026-07-03 15:58:29 +08:00
|
|
|
|
| user:manage | 用户管理 |
|
|
|
|
|
|
| role:manage | 角色管理 |
|
|
|
|
|
|
| sso:manage | SSO管理 |
|
|
|
|
|
|
| system:manage | 系统管理 |
|
|
|
|
|
|
| * | 所有权限(超级管理员) |
|
|
|
|
|
|
|
2026-07-10 17:33:33 +08:00
|
|
|
|
### 默认角色权限
|
|
|
|
|
|
|
|
|
|
|
|
| 角色 | 权限 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| admin | *(全部) |
|
|
|
|
|
|
| staff | file:create, file:read, file:update, file:delete, file:upload, file:download, file:grant, share:create, webdav:access |
|
|
|
|
|
|
| user | file:create, file:read, file:update, file:upload, file:download, share:create |
|
|
|
|
|
|
| guest | file:read |
|
|
|
|
|
|
|
|
|
|
|
|
### 文件可见性规则
|
|
|
|
|
|
|
|
|
|
|
|
| 角色 | 可见范围 |
|
|
|
|
|
|
|------|----------|
|
|
|
|
|
|
| admin | 所有文件 |
|
|
|
|
|
|
| 其他角色 | 自己创建的 + fs_file_permission 中被授权的 |
|
|
|
|
|
|
|
|
|
|
|
|
### 文件操作权限规则
|
|
|
|
|
|
|
|
|
|
|
|
文件操作(删除/重命名/移动/下载/授权等)需要同时满足:
|
|
|
|
|
|
1. 用户角色拥有对应权限码(如 `file:delete`)
|
|
|
|
|
|
2. 用户有权操作该具体文件(owner / admin / fs_file_permission 被授权)
|
|
|
|
|
|
|
2026-07-03 15:58:29 +08:00
|
|
|
|
### 2.17 统一文件访问(自动选择模式)
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/file/:id/access
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
> 根据存储策略的 `access_mode` 自动选择:
|
|
|
|
|
|
> - `proxy`: 中转模式, 直接返回文件流
|
|
|
|
|
|
> - `presigned`: 预签名模式, 302重定向到MinIO
|
|
|
|
|
|
> - `cdn`: CDN模式, 302重定向到CDN地址
|
|
|
|
|
|
|
|
|
|
|
|
### 2.18 获取文件访问URL
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/file/:id/access-url
|
2026-07-10 17:33:33 +08:00
|
|
|
|
token: <token>
|
2026-07-03 15:58:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
**响应:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 0,
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"mode": "presigned",
|
|
|
|
|
|
"url": "http://files.example.com/minio/seeyon-fs/2026/07/02/...?X-Amz-...",
|
|
|
|
|
|
"file_name": "test.pdf",
|
|
|
|
|
|
"file_size": 1024000,
|
|
|
|
|
|
"content_type": "application/pdf"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2.19 分享文件统一访问(公开)
|
|
|
|
|
|
```
|
|
|
|
|
|
GET /api/s/:code/access?password=xxx
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 访问模式说明
|
|
|
|
|
|
|
|
|
|
|
|
| 模式 | 适用场景 | 工作原理 |
|
|
|
|
|
|
|------|----------|----------|
|
|
|
|
|
|
| `proxy` | 私有文件、严格权限 | Nginx→Server鉴权→Server从MinIO拉取→返回给用户 |
|
|
|
|
|
|
| `presigned` | 公开分享、大文件 | Server生成预签名URL→用户直连MinIO(经Nginx代理) |
|
|
|
|
|
|
| `cdn` | 静态资源、本地存储 | 返回CDN地址, 用户直接访问 |
|
|
|
|
|
|
|
|
|
|
|
|
**预签名模式配置示例:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"endpoint": "localhost:9000",
|
|
|
|
|
|
"bucket": "seeyon-fs",
|
|
|
|
|
|
"access_key": "admin",
|
|
|
|
|
|
"secret_key": "123456789",
|
|
|
|
|
|
"access_mode": "presigned",
|
|
|
|
|
|
"nginx_endpoint": "http://files.example.com"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
> `nginx_endpoint`: Nginx公网地址, 替换MinIO内部地址, 用户通过Nginx访问MinIO
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 存储策略类型
|
|
|
|
|
|
|
|
|
|
|
|
| type | 说明 | config 字段 |
|
|
|
|
|
|
|------|------|-------------|
|
|
|
|
|
|
| local | 本地磁盘 | base_path |
|
|
|
|
|
|
| minio | MinIO | endpoint, access_key, secret_key, bucket, use_ssl |
|
|
|
|
|
|
| s3 | AWS S3 | endpoint, access_key, secret_key, bucket, region, use_ssl |
|
|
|
|
|
|
| oss | 阿里云 OSS | endpoint, access_key, secret_key, bucket, region |
|