基于 Go 的轻量随机图服务,支持:
- PC / 手机随机图接口
- 302 跳转静态资源(CDN 友好)
- JSON 返回静态图片 URL
- Token 登录后上传(会话鉴权)
- 图片标签(tag)索引与按标签随机
- 后台标签管理页面(查看图片、覆盖/追加标签)
- 上传页拖拽选择 + 点击上传 + 可附加标签
- 接口调用统计与定时落盘
/api/web:随机 PC 图(302 到/images/...)/api/m:随机手机图(302 到/images/...)/api/web?tag=anime:按标签随机 PC 图/api/m?tag=anime:按标签随机手机图
/api/web/json:返回 PC 图静态 URL/api/m/json:返回手机图静态 URL/api/web/json?tag=anime:按标签返回 PC 图 URL/api/m/json?tag=anime:按标签返回手机图 URL
POST /api/login:提交 token 登录,写入 HttpOnly 会话 CookiePOST /api/logout:登出并清理会话GET /api/auth/status:查看当前是否登录
POST /api/upload- 表单字段:
file:图片文件category:web或mtags:可选,逗号分隔(如anime,girl,night)
- 说明:
- 不再通过表单 token 上传
- 必须先登录再上传
GET /api/admin/tags:返回标签列表与图片数量GET /api/admin/images:分页查询图片+标签- 参数:
category、tag、page、pageSize
- 参数:
POST /api/admin/image/tags:设置图片标签- JSON:
{"path":"web/xxx.webp","tags":["anime"],"mode":"replace|append"}
- JSON:
GET /api/stats- 统计驻留内存,定时写入
stats.json
- 页面:
/public/* - 图片:
/images/* - 图片响应包含缓存头:
Cache-Control: public, max-age=31536000, immutable
这意味着随机接口可通过 302 指向静态图片,由 CDN 长缓存图片资源。
/public/index.html:首页(接口入口 + 统计 + 背景刷新)/public/login.html:Token 登录页/public/upload.html:上传页(拖拽/点选文件,点击上传按钮提交,可附加标签)/public/admin.html:后台标签管理页
One picture-API/
├─ main.go
├─ tokens.json
├─ stats.json
├─ tags_index.json
├─ images/
│ ├─ web/
│ └─ m/
└─ public/
├─ index.html
├─ login.html
├─ upload.html
├─ common.css
└─ common.js
在项目目录执行:
go run main.go启动后访问:
http://localhost:8080
{
"tokens": [
"请替换为你的高强度token"
]
}建议使用长度 >= 32 的随机字符串,并定期轮换。