API 文档
所有接口都基于 https://tgimage.163418.xyz。公开读取接口无需鉴权;上传与管理接口需要 Token 或后台登录态。
快速开始
上传一张图片,拿到的 preview 可以直接放进 <img>:
curl -X POST https://tgimage.163418.xyz/upload \ -H "Authorization: Bearer <UPLOAD_TOKEN>" \ -F "file=@cat.jpg" \ -F "category=animals"
{
"ok": true,
"id": "mvy5mpa0mzvrfj1m",
"type": "image",
"category": "animals",
"name": "cat.jpg",
"size": 252962,
"preview": "https://tgimage.163418.xyz/i/mvy5mpa0mzvrfj1m",
"download": "https://tgimage.163418.xyz/f/mvy5mpa0mzvrfj1m",
"message_id": 3
}<img src="https://tgimage.163418.xyz/random/animals" alt="random">
鉴权
| 方式 | 用法 |
|---|---|
| Bearer Token | Authorization: Bearer <UPLOAD_TOKEN 或 ADMIN_TOKEN>,脚本/curl 用 |
| 后台登录 | POST /api/login 用账号密码换取 7 天有效的 HttpOnly Cookie,浏览器用 |
curl -X POST https://tgimage.163418.xyz/api/login \
-H "Content-Type: application/json" \
-d '{"username":"<账号>","password":"<密码>"}' -c cookie.txt上传接口
/upload 与所有 /api/item*、/api/batch、/api/stats 都需要鉴权;/i/、/f/、/random、/api/list、/api/categories、/api/visits 公开可读。POST /upload
multipart/form-data 上传单个文件。图片按文件发送可保持原图(不重压缩)。
| 字段 | 必填 | 说明 |
|---|---|---|
file | 是 | 文件本体 |
category | 否 | 分类,默认 uncategorized;会出现在随机图路径里 |
type | 否 | auto(默认)按 MIME 判断,或强制 image / file |
as_photo | 否 | 1 用图片消息发送(频道里显示大图,但 Telegram 会压缩) |
# 上传文件(非图片会自动归为 file,只有下载链接) curl -X POST https://tgimage.163418.xyz/upload \ -H "Authorization: Bearer <UPLOAD_TOKEN>" \ -F "file=@report.pdf" \ -F "category=docs"
访问与下载
| 路径 | 行为 |
|---|---|
/i/:id | 图片内联预览,Content-Disposition: inline,可直接引用;支持 Range / ETag / 长缓存 |
/f/:id | 强制下载,保留原文件名;同样支持 Range(大文件断点续传) |
# 下载(保留原文件名) curl -O -J https://tgimage.163418.xyz/f/<id> # 断点续传(Range) curl -H "Range: bytes=0-1048575" https://tgimage.163418.xyz/i/<id> -o part1.jpg
随机图
按分类随机返回一张图片,默认 302 跳转到 /i/:id,加 ?format=json 返回信息。
# 直接当图片地址用 <img src="https://tgimage.163418.xyz/random/animals"> # 全部图片里随机 https://tgimage.163418.xyz/random # 返回 JSON curl "https://tgimage.163418.xyz/random/anime?format=json"
{
"id": "mvy5rmhxtd3qnz1c",
"category": "anime",
"name": "anime-20261102-022315.jpg",
"preview": "https://tgimage.163418.xyz/i/mvy5rmhxtd3qnz1c",
"download": "https://tgimage.163418.xyz/f/mvy5rmhxtd3qnz1c"
}当前可用分类:加载中…
列表与分类
| 路径 | 说明 |
|---|---|
/api/list/:category?limit=36 | 该分类最新图片;all 表示全部 |
/api/categories | 分类及数量 + 概要统计 |
/api/visits | 图片调用次数(calls = 直链 + 随机图),边缘缓存 30 秒 |
/api/home?category=all&limit=24 | 首页一次拿全:分类 + 概要 + 调用次数 + 图库第一页(省 3 个请求) |
/health | 健康检查 |
curl "https://tgimage.163418.xyz/api/list/animals?limit=12" curl "https://tgimage.163418.xyz/api/categories" curl "https://tgimage.163418.xyz/api/visits"
管理接口
以下接口需要鉴权,用于后台与自动化脚本。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/items | 查询:type / category / q / sort / trash=1 / limit / offset |
| GET | /api/item/:id | 单条详情 |
| PATCH | /api/item/:id | 改名 / 换分类:{"name","category"} |
| DELETE | /api/item/:id | 软删除进回收站;加 ?hard=1 彻底删除 |
| POST | /api/batch | {"ids":[],"action":"trash|restore|delete|move","category"} |
| GET | /api/stats | 图片数 / 文件数 / 占用空间 / 分类分布 |
| GET | /api/traffic?days=14 | 访问统计:总量、按天、按路由、状态码、热门路径 |
| GET | /api/categories/list | 分类列表,按类型分开:{image:[...], file:[...]} |
| POST | /api/categories | 新建:{"type":"image|file","name":"wallpaper"} |
| PATCH | /api/categories/:name?type=image | 重命名该类型的分类并迁移其条目 |
| DELETE | /api/categories/:name?type=file&move_to= | 删除该类型的分类;该类型下非空时需指定迁移目标 |
# 查询图片,按大小排序
curl -H "Authorization: Bearer <TOKEN>" \
"https://tgimage.163418.xyz/api/items?type=image&sort=size&limit=10"
# 改名 + 换分类
curl -X PATCH https://tgimage.163418.xyz/api/item/<id> \
-H "Authorization: Bearer <TOKEN>" -H "Content-Type: application/json" \
-d '{"name":"new.jpg","category":"wallpaper"}'
# 批量移入回收站
curl -X POST https://tgimage.163418.xyz/api/batch \
-H "Authorization: Bearer <TOKEN>" -H "Content-Type: application/json" \
-d '{"ids":["id1","id2"],"action":"trash"}'
# 分类:新建 / 重命名 / 删除(非空分类要指定迁移目标)
curl -X POST https://tgimage.163418.xyz/api/categories -H "Authorization: Bearer <TOKEN>" -H "Content-Type: application/json" -d '{"name":"wallpaper"}'
curl -X PATCH https://tgimage.163418.xyz/api/categories/wallpaper -H "Authorization: Bearer <TOKEN>" -H "Content-Type: application/json" -d '{"name":"desktop"}'
curl -X DELETE "https://tgimage.163418.xyz/api/categories/desktop?move_to=animals" -H "Authorization: Bearer <TOKEN>"错误码
| 状态 | 含义 |
|---|---|
| 400 | 参数缺失或格式错误 |
| 401 | 未登录 / Token 无效 |
| 404 | 资源不存在或该分类没有图片 |
| 413 | 文件超过 50MB |
| 502 | Telegram 上传/下载失败(机器人权限或网络) |
{"error": "telegram upload failed", "detail": {"ok": false, "description": "Forbidden: bot is not a member of the channel chat"}}限制说明
| 项目 | 限制 |
|---|---|
| 单文件上传 | ≤ 50MB(Telegram Bot API 限制) |
| 下载 | ≤ 20MB(超过的能存进频道,但取不回来) |
| 分类名 | 字母 / 数字 / 中文 / 下划线 / 横线,≤ 32 字符 |
| 列表一致性 | KV 最终一致,新上传的条目在其他边缘节点可能有几十秒延迟 |
| 随机图 | 只从"未被删除的图片"里取,文件不参与 |