img-worker
- 图床服务
轻量图床,基于 Cloudflare Worker + R2。
特性
- 内容哈希去重:相同图片只存一份
- 长期缓存:hash 作为文件名,可永久缓存
- 格式支持:jpg, png, gif, webp, avif, svg
- 大小限制:10MB
API
上传图片
# FormData 上传
curl -X POST https://<REDACTED_DOMAIN>/upload \
-H "Authorization: Bearer $<REDACTED_TOKEN>" \
-F "file=@image.png"
# Binary 上传
curl -X POST https://<REDACTED_DOMAIN>/upload \
-H "Authorization: Bearer $<REDACTED_TOKEN>" \
-H "Content-Type: image/png" \
-H "X-Filename: image.png" \
--data-binary @image.png
返回:
{
"url": "https://<REDACTED_DOMAIN>/abc123.png",
"hash": "abc123...",
"ext": "png",
"size": 12345,
"exists": false
}
访问图片
GET https://<REDACTED_DOMAIN>/{hash}.{ext}
带 1 年强缓存。
删除图片
curl -X DELETE https://<REDACTED_DOMAIN>/abc123.png \
-H "Authorization: Bearer $<REDACTED_TOKEN>"
部署
1. 创建 R2 Bucket
wrangler r2 bucket create img
2. 设置 API Key
cd workers/img
wrangler secret put <REDACTED_TOKEN>
# 输入你的 API Key
3. 部署
wrangler deploy
4. 配置自定义域名
在 Cloudflare Dashboard:
- Workers & Pages →
→ Settings → Triggers - Add Custom Domain:
<REDACTED_DOMAIN>
项目结构
workers/img/
├── src/index.ts # 主入口
├── wrangler.toml # 配置
└── package.json
环境变量
| 变量 | 说明 |
|---|---|
<REDACTED_TOKEN> |
上传/删除认证 |
<REDACTED_ENV_VAR> |
公开访问地址 |
<REDACTED_ENV_VAR> |
R2 绑定 |
费用
R2 免费额度:
- 存储:10GB/月
- Class A(写入):100 万次/月
- Class B(读取):1000 万次/月
对于个人图床完全够用。