JJY文件传输系统
0.1.3-20260619-120454-43e1b32 · ac92cf4

API 文档

面向二次外部对接的接口说明。

# API 文档

本文档面向外部系统二次对接。所有接口默认返回 JSON,失败时使用合适的 4xx/5xx 状态码,并尽量返回 `success`、`error` 和 `meta` 诊断字段。

## 认证

平台浏览器会话使用 `edgeone_upload_session` HttpOnly Cookie。外部系统如需服务端对接,建议后续扩展专用 API Token;当前已实现接口以 Cookie 会话和公开分享/搜索接口为主。

### 密码登录

`POST /api/auth/login-password`

请求:

```json
{
  "email": "user@example.com",
  "password": "password123"
}
```

成功后写入上传会话 Cookie。

### 邮箱验证码

- `POST /api/auth/send-code` 发送验证码,`purpose` 为 `login` 或 `reset_password`。
- `POST /api/auth/login-code` 使用邮箱验证码登录。
- `POST /api/auth/reset-password` 使用验证码重置密码。
- `POST /api/auth/set-password` 当前登录用户设置密码。
- `POST /api/auth/logout` 退出登录并清除 Cookie。

## 文件上传

### 初始化上传

`POST /api/files/init-upload`

请求:

```json
{
  "name": "example.pdf",
  "size": 1024,
  "type": "application/pdf",
  "recipientEmail": "receiver@example.com",
  "wechatGroupName": "微信群名称",
  "shareTag": "业务标签",
  "checksum": "32位MD5"
}
```

返回 COS 直传 `PUT` 地址和文件元数据。无 Cookie 时按 `Anonymous user` 处理。

### 完成上传

`POST /api/files/{fileId}/complete`

服务端读取 COS 对象信息并更新文件状态、ETag,同时写入上传完成日志。

### 文件预览与下载

- `GET /api/files/{fileId}/preview` 生成当前有效的预览地址。
- `GET /api/files/{fileId}/download` 点击下载时实时重新签名并 302 跳转。

## 分享

### 创建分享

`POST /api/files/{fileId}/share`

请求:

```json
{
  "allowDownload": true,
  "expiresAt": "2026-12-31T00:00:00.000Z",
  "maxViews": 100,
  "password": "optional-password"
}
```

返回 `/shares/{token}` 分享页面 URL。

### 访问分享

- `GET /api/shares/{token}` 获取分享文件预览信息;密码保护分享会返回 HTTP 401 和 `requiresPassword: true`。
- `POST /api/shares/{token}` 使用 `{ "password": "..." }` 解锁密码保护分享,成功后写入短期 HttpOnly 访问 Cookie 并返回预览信息。
- `GET /api/shares/{token}/download` 点击下载时实时重新签名并 302 跳转;密码保护分享需先解锁。

## 公开搜索与取回

### 搜索文件

`POST /api/public/files/search`

支持按 `fileName`、`shareId`、`checksum`、`cosEtag`、`recipientEmail`、`wechatGroupName`、`shareTag` 搜索。

### 取回文件

`POST /api/public/files/{fileId}/retrieve`

请求体使用同搜索条件;条件匹配后实时跳转到下载接口。

## 用户与设置

- `GET /api/users` 列出用户。
- `POST /api/users` 平台管理员添加用户。
- `PATCH /api/users/{userId}` 平台管理员或用户本人更新用户信息。
- `DELETE /api/users/{userId}` 平台管理员删除普通用户。
- `GET /api/users/invitations` 查看邀请。
- `POST /api/users/invitations` 创建邀请。
- `GET /api/settings/registration` 查看注册设置。
- `PATCH /api/settings/registration` 平台管理员修改注册设置。

## 健康检查

`GET /api/health/db`

返回当前元数据存储配置和数据库连接诊断,不返回密码。