图床方案合集:PicGo + PicList + 开源/付费图床全对比
写博客 / 写文档每天都要插图。但稳定的图床比想象中难找:免费的怕跑路、商业的怕封号、自建的怕麻烦。这篇把主流方案分四类讲清楚——自建对象存储、付费图床、自部署开源图床、第三方公共图床——再给一套我自己在用的 PicList + R2 完整配置。
一、图床方案地图
R2 / B2 / 七牛] B -->|否| S2[付费图床
SM.MS / 又拍云] C -->|是| S3[自部署开源
EasyImages / OneImg] C -->|否| S4[公共图床
imgur / Postimage / sm.ms]
四种思路的优劣:
| 方案 | 稳定性 | 速度 | 成本 | 跑路风险 |
|---|---|---|---|---|
| 自建对象存储 + CDN | ★★★★★ | ★★★★★ | 5/月 | 极低 |
| 付费商业图床 | ★★★★ | ★★★★ | 20/月 | 中 |
| 自部署开源 + VPS | ★★★ | ★★★ | VPS 费用 | 看 VPS 商家 |
| 公共图床 | ★★ | 看运气 | 0 | 高 |
二、推荐方案:R2 + PicList(自用首选)
这是我自己在用的组合:
| 组件 | 用途 |
|---|---|
| Cloudflare R2 | 文件存储(10G 免费,出站免费) |
| 自定义域名 | URL 好看 + 走 CF CDN |
| PicList | 本地上传客户端 |
详细的 R2 开通流程见 Cloudflare R2 完全指南。这里重点讲 PicList 的关键配置。
2.1 为什么 PicList 比 PicGo 好
| 维度 | PicGo | PicList |
|---|---|---|
| 维护活跃度 | 慢 | 高 |
| 文件管理(删除/重命名) | 无 | 有 |
| 监听粘贴板 | 有 | 有 |
| 批量上传 | 一般 | 好 |
| 自定义命名模板 | 基本 | 丰富 |
| 多图床配置切换 | 一般 | 顺手 |
PicList 是 PicGo 的社区 fork,做了大量体验改进。下载:
https://github.com/Kuingsmile/PicList/releases2.2 PicList 接 R2 的关键配置
图床设置 → AWS S3 → 新建一份:
| 字段 | 值 |
|---|---|
| 应用密钥 ID | R2 API Token 的 Access Key ID |
| 应用密钥 | R2 API Token 的 Secret Access Key |
| 桶(Bucket) | 你的 R2 桶名 |
| 文件路径 | {year}/{month}/{md5}.{extName} |
| 自定义节点(Endpoint) | https://<accountid>.r2.cloudflarestorage.com |
| 自定义域名 | https://img.your-domain.com |
| 自定义区域 | auto |
| 路径风格(path-style) | 关闭 |
🪤 这几个值任何一个填错都不会成功。Endpoint 是 cloudflarestorage.com 不是 r2.dev。
三、文件命名模板:{md5}.{extName} 是圣经
PicList / PicGo 都支持命名模板。强烈推荐用 MD5 命名:
| 模板 | 效果 | 评价 |
|---|---|---|
{md5}.{extName} | abc123.png | ★★★★★ 推荐:相同图不重传 |
{year}/{month}/{md5}.{extName} | 2026/06/abc.png | ★★★★★ 推荐:分目录便于管理 |
{timestamp}.{extName} | 1734567890.png | ★★ 重复上传会有不同 URL |
{filename}.{extName} | screenshot.png | ★ 文件名冲突 |
💡 用
{md5}的好处:同一张图你截 100 次也只占一份空间——MD5 相同,上传到 R2 会覆盖同一个 key。
四、命名一致性 = 后端可随时切换
这是图床设计的关键认知:
最终 URL = 域名 + 路径https://img.your-domain.com / 2026/06/abc123.png ↑ ↑ 你控制 命名一致只要这两点保证,后端存储可以无痛切换:
R2 哪天涨价 / 封号,你把域名 origin 切到 B2 + Alist,所有旧博客里的图片 URL 一行都不用改。
五、迁移备份脚本(rclone)
R2 主存 + B2 冷备:
# 装 rclonecurl https://rclone.org/install.sh | sudo bash
# 配置 remoterclone config# 加两个 remote: r2 / b2
# 每周同步备份0 3 * * 0 rclone sync r2:img-bucket b2:img-bucket-backup \ --log-file /var/log/rclone.log六、其它对象存储方案
如果 R2 不能用(被封号、流量超限),备选:
6.1 Backblaze B2 + Cloudflare CDN
- $6/TB/月,到 CF 出站免费(Bandwidth Alliance)
- 国内速度套 CF CDN 后能用
- 配置和 R2 几乎一样
6.2 七牛云
- 国内访问最快
- 10G 永久免费 + 10G 流量/月
- 流量超额按量付费,容易超支
- 适合个人小流量博客
6.3 又拍云
- 加入”又拍云联盟”(在网站底部加 logo)= 10G 永久免费 + 15G 月流量
- 国内速度好
- 适合做个站联盟交换流量的人
七、自部署开源图床
如果你已经有 VPS,可以自己跑一个:
7.1 EasyImages2.0
https://github.com/icret/EasyImages2.0- PHP 写的,单文件部署
- 自带管理界面
- 支持 API 上传
- 缺点:图片直接存 VPS 磁盘,迁移麻烦
7.2 OneImg(初春图床)
https://github.com/onexru/oneimg- 更现代化的 UI
- 多用户支持
7.3 Telegraph-Image
github.com 搜 Telegraph-Image- 基于 Telegraph 的免费图床
- Workers 部署,无需服务器
- 速度看 CF
- 缺点:图片放别人家有跑路风险
八、第三方公共图床
仅适合临时用 / 不重要的图——所有第三方图床都有跑路 / 防盗链 / 突然清空 的可能。
| 图床 | 速度 | 限制 | 备注 |
|---|---|---|---|
| sm.ms | 国内外都还行 | 注册后 5MB / 张 | 老牌、最稳的公共图床 |
| imgur | 海外快 | 国内被墙 | 国际标准,文档/issue 友好 |
| PostImage | 海外快 | 国内一般 | 老牌 |
| upload.cc | CF CDN | 永久存储 | 香港人开 |
| 微博图床 | 国内极快 | 防盗链 | 需要登录微博 cookies |
| 聚合图床 | 看后端 | 一图多床 | superbed.cn |
⚠️ 微博图床防盗链越来越严,已经基本不适合做技术博客的图床。
九、批量替换工具:从旧图床迁到新图床
写了一堆 markdown 文章后想换图床?两类思路:
9.1 改 DNS 不改文章(推荐)
只要:
- 旧图床域名是你自己的(如
img.your-domain.com) - 新后端的文件名和旧的一致
把 DNS 切到新后端,所有文章一行不用改。
9.2 实在要改 markdown 的批量替换
# Linux/macOSfind /path/to/blog -name "*.md" -exec \ sed -i 's|old-domain.com|new-domain.com|g' {} +
# macOS(BSD sed 要加空字符串)find /path/to/blog -name "*.md" -exec \ sed -i '' 's|old-domain.com|new-domain.com|g' {} +或者写个 Python 脚本检测哪些文件包含旧域名图片,需要迁移:
import osimport refrom pathlib import Path
PATTERN = r'!\[([^\]]*)\]\((https://old-domain\.com/[^)]+)\)'
def scan(target_dir): for md_file in Path(target_dir).rglob('*.md'): with open(md_file, 'r', encoding='utf-8') as f: content = f.read() matches = re.findall(PATTERN, content) if matches: print(f"{md_file}: {len(matches)} 张待迁移")
scan("/path/to/blog")十、CDN 缓存优化
R2 / B2 都按请求次数计费。挂上 CF CDN 后,绝大多数请求会被 CDN 命中,根本不会回源。
CF 控制台 → Caching → Cache Rules → Create rule:
| 字段 | 值 |
|---|---|
| Rule name | r2-images-cache |
| If Hostname equals | img.your-domain.com |
| Eligible for cache | ✅ |
| Edge TTL | 1 month |
| Browser TTL | 7 days |
之后 R2 的 Class B 请求会降到原来的 5%-10%。
十一、几条实用经验
- 自己的域名 = 主权:第三方图床域名挂掉就完蛋,自己域名能随时切后端。
{md5}.{extName}永远不要换:换命名规则等于所有旧链接重传。- R2 主 + B2 备:双对象存储双保险,年成本 < $1。
- PicList 比 PicGo 顺手:建议直接 PicList,PicGo 没必要再装。
- 不要依赖公共图床做技术博客:sm.ms 这种最稳的也曾经停服一阵。
- 截图剪贴板上传是核心生产力:
Win + Shift + S→ 截图 → 复制 → PicList 自动上传 → 返回 markdown,三秒搞定。
按这套配下来,写博客插图体验丝滑、年成本几乎为 0、未来切换零成本。