亮点 - v3.2 带宽限速(upload_rate/download_rate,字节/秒,0=不限速;管理端立即生效) - middleware/bandwidth.go 时间窗对齐 sleep 算法 + 单元测试(400KB@100KB/s 4.00s 精度) - 下载:serveFile 包裹 storage.ReadCloser(统一覆盖 local/webdav/s3 代理下载) - 上传:UploadBandwidthMiddleware 包裹 Request.Body(shareFile/chunk/presign proxy) - S3 预签名直传不可服务端限速——UI/文档明示 - 后台 SettingsView 增加 MB/s 友好输入;i18n zh-CN/en-US 双语 - v3.2 文档:新增 docs/api/13-bandwidth.md 专题;10-config 指针;00-overview changelog 与限流表带宽行;openapi.yaml 三处 schema + description 更新 - README.md / web/README.md / server/README.md / deploy/README.md 全部覆盖 品牌(v3.1 收尾) - 文件快递柜 → 文件快传(前端/后端默认值/文档/产物/运行 KV) - 「复制取件码」按钮删除;取件码块点击即复制(保持原尺寸) - 「复制链接」→「复制链接和提取码」(一并复制链接和提取码) 产品修复(v3.1.1) - 文本分享 Content-Type text/plain + urlencoded body:前端显式声明 urlencoded 头根治; 后端 bindJSONOrForm 兜底兼容 text/plain + JSON/urlencoded 嗅探 - Docker 部署文档校对到 v3.1 现状(热切换 + 端口/卷/健康检查)
5.8 KiB
5.8 KiB
API 概述
文件快传 Go 版(26.9)对外提供一套 REST API,覆盖文本/文件分享、分片上传、 预签名直传、管理后台与审计日志查询。
更新日志
- v3.2:上下行带宽限速(
upload_rate/download_rate,详见《带宽限速》) - v3.1:站点对外域名(
site_domain)、自定义提取码(5~8 位)本文档与server/internal/api/实际实现逐一对齐, 交互式规范见站内/openapi(源文件docs/openapi.yaml)。
Base URL
- 服务默认监听
:8466,Base URL 为http://<host>:8466(下文示例统一用http://localhost:8466)。 - 业务路由挂根路径(与参考实现一致):
/share/*、/chunk/*、/presign/*、/admin/*、/setup。 - 仅两个公共接口带
/api/v1前缀:/api/v1/health、/api/v1/config。
统一响应封装
所有 JSON 接口返回统一结构,HTTP 状态码与 code 一致;失败时 data 缺省:
{ "code": 200, "msg": "ok", "data": { } }
失败示例(404):
{ "code": 404, "msg": "文件不存在" }
个别端点直接返回原始内容而非 JSON 封装(文档中已单独标注):
| 端点 | 响应形式 |
|---|---|
GET /share/select?code=(文本分享) |
text/plain; charset=utf-8 正文 |
GET /share/select?code=(文件分享) |
文件二进制流(200/206,支持 Range) |
GET /share/download?key=&code=(文件分享) |
文件二进制流(200/206,支持 Range) |
GET /admin/file/download?id=(文件分享) |
文件二进制流 |
GET /setup / POST /setup(表单) |
HTML 向导/成功页 |
字段命名约定
- 接口字段以 snake_case 为主(
file_code、size_bytes)。 - 文件列表与审计日志的行字段同时输出 snake_case 与 camelCase 双份(如
expired_at与expiredAt),文档以 snake_case 为准,camelCase 仅为前端兼容保留。
认证
- 游客接口无需认证;是否允许游客上传由配置
openUpload控制(关闭时上传类接口要求管理员Authorization: Bearer <token>,否则 403)。 - 管理接口(
/admin/login除外)一律要求Authorization: Bearer <JWT>,无效/缺失返回 401。 - 详情见《认证与限流》。
限流
按 IP(可信代理场景解析 X-Forwarded-For)维度限流,超限返回 423:
| 规则 | 计数时机 | 默认(次/窗口) | 相关配置 |
|---|---|---|---|
upload |
上传成功后计数 | 10 次 / 1 分钟 | uploadCount / uploadMinute |
error |
取件失败(404/过期)时计数 | 10 次 / 1 分钟 | errorCount / errorMinute |
login |
登录失败时计数 | 5 次 / 15 分钟 | loginCount / loginMinute |
metadata |
每次访问即计数 | 同 error |
errorCount / errorMinute |
bandwidth |
每 Read 块按 rate 字节/秒对齐 sleep,0=不限速 |
0 / 0(不限) | upload_rate / download_rate |
初始化守卫
系统未初始化(未设置管理员密码)时,除 GET|POST /setup 与 GET /api/v1/health 外,
所有接口一律返回 428:
{ "code": 428, "msg": "系统未初始化,请先完成初始化" }
首次部署请先访问 GET /setup 获取 HTML 向导,或直接 POST /setup 完成初始化(见《管理后台 API》初始化章节)。
审计
所有上传/下载端点经审计中间件自动落库(操作时间/IP/UA/设备解析/动作/结果/字节数/耗时/角色),
失败与被拒绝的请求同样记录;管理端经 GET /admin/audit/list 查询,详见《审计日志》。
端点总览
| 模块 | 端点 |
|---|---|
| 公共 | GET /api/v1/health · GET /api/v1/config · GET /robots.txt(输出 robotsText 配置) |
| 初始化 | GET /setup · POST /setup |
| 文本分享 | POST /share/text |
| 文件分享 | POST /share/file |
| 查询与取件 | GET/POST /share/metadata · GET /share/select · POST /share/select · GET /share/download |
| 分片上传 | POST /chunk/upload/init · POST /chunk/upload/{uploadID}/{chunkIndex} · GET /chunk/upload/status/{uploadID} · POST /chunk/upload/complete/{uploadID} · DELETE /chunk/upload/{uploadID} |
| 预签名直传 | POST /presign/upload/init · PUT /presign/upload/proxy/{uploadID} · POST /presign/upload/confirm/{uploadID} · GET /presign/upload/status/{uploadID} · DELETE /presign/upload/{uploadID} |
| 管理后台 | POST /admin/login · GET /admin/verify · POST /admin/logout · GET /admin/dashboard · 文件管理 /admin/file/* · 配置 /admin/config/* · 密码 /admin/settings/password |
| 审计日志 | GET /admin/audit/list(别名 /admin/audit/logs) |
专题文档
| 主题 | 文档 |
|---|---|
| 站点 Logo 自定义 | 12-logo.md |
| 错误码 | 11-errors.md |
| 带宽限速(v3.2) | 13-bandwidth.md |
时间与编码
- 时间字段一律 RFC 3339(如
2025-06-01T12:00:00+08:00);管理员会话过期时间为 Unix 秒。 - 请求体支持
application/json与application/x-www-form-urlencoded(上传类为multipart/form-data),文档示例以 JSON/curl 为主。 - CORS:公开接口放开(Bearer 认证,无 Cookie CSRF 面);管理端
/admin/*已收紧——携带 Origin 且既不同源也不在site_domain白名单时不下发 CORS 头(浏览器拦截跨域读取)。
交互式文档
- 站内文档页:
/docs(渲染本目录 markdown,构建时内嵌)。 - Swagger UI:
/openapi(渲染docs/openapi.yaml,构建时内嵌)。 - OpenAPI 规范源文件为仓库内
docs/openapi.yaml;如需经后端直接下载, 需在部署时把它拷贝进前端静态产物web/dist/(未拷贝时该路径按 SPA 回退返回页面)。