Daimon's Blog
主页 归档 关于 RSS 探针 常用工具
主页
归档
关于
RSS
探针
常用工具

图床方案合集:PicGo + PicList + 开源/付费图床全对比

daimon daimon 2025-11-07 #图床#PicGo#PicList#R2#对象存储

写博客 / 写文档每天都要插图。但稳定的图床比想象中难找:免费的怕跑路、商业的怕封号、自建的怕麻烦。这篇把主流方案分四类讲清楚——自建对象存储、付费图床、自部署开源图床、第三方公共图床——再给一套我自己在用的 PicList + R2 完整配置。

一、图床方案地图#

graph TD Q{需要图床?} --> A{用量大不大} A -->|大| B{在意稳定/隐私?} A -->|小| C{愿意折腾?} B -->|是| S1[自建对象存储
R2 / B2 / 七牛] B -->|否| S2[付费图床
SM.MS / 又拍云] C -->|是| S3[自部署开源
EasyImages / OneImg] C -->|否| S4[公共图床
imgur / Postimage / sm.ms]

四种思路的优劣:

方案稳定性速度成本跑路风险
自建对象存储 + CDN★★★★★★★★★★0−0-0−5/月极低
付费商业图床★★★★★★★★5−5-5−20/月中
自部署开源 + VPS★★★★★★VPS 费用看 VPS 商家
公共图床★★看运气0高

二、推荐方案:R2 + PicList(自用首选)#

这是我自己在用的组合:

组件用途
Cloudflare R2文件存储(10G 免费,出站免费)
自定义域名URL 好看 + 走 CF CDN
PicList本地上传客户端

详细的 R2 开通流程见 Cloudflare R2 完全指南。这里重点讲 PicList 的关键配置。

2.1 为什么 PicList 比 PicGo 好#

维度PicGoPicList
维护活跃度慢高
文件管理(删除/重命名)无有
监听粘贴板有有
批量上传一般好
自定义命名模板基本丰富
多图床配置切换一般顺手

PicList 是 PicGo 的社区 fork,做了大量体验改进。下载:

1
https://github.com/Kuingsmile/PicList/releases

2.2 PicList 接 R2 的关键配置#

图床设置 → AWS S3 → 新建一份:

字段值
应用密钥 IDR2 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。

四、命名一致性 = 后端可随时切换#

这是图床设计的关键认知:

1
最终 URL = 域名 + 路径
2
https://img.your-domain.com / 2026/06/abc123.png
3
↑ ↑
4
你控制 命名一致

只要这两点保证,后端存储可以无痛切换:

graph LR D[img.your-domain.com] -.指向.-> R2[Cloudflare R2] D -.或.-> B2[Backblaze B2] D -.或.-> AL[Alist + OneDrive] D -.或.-> S3[AWS S3] D -.或.-> Q[七牛云]

R2 哪天涨价 / 封号,你把域名 origin 切到 B2 + Alist,所有旧博客里的图片 URL 一行都不用改。

五、迁移备份脚本(rclone)#

R2 主存 + B2 冷备:

Terminal window
1
# 装 rclone
2
curl https://rclone.org/install.sh | sudo bash
3
4
# 配置 remote
5
rclone config
6
# 加两个 remote: r2 / b2
7
8
# 每周同步备份
9
0 3 * * 0 rclone sync r2:img-bucket b2:img-bucket-backup \
10
--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#

1
https://github.com/icret/EasyImages2.0
  • PHP 写的,单文件部署
  • 自带管理界面
  • 支持 API 上传
  • 缺点:图片直接存 VPS 磁盘,迁移麻烦

7.2 OneImg(初春图床)#

1
https://github.com/onexru/oneimg
  • 更现代化的 UI
  • 多用户支持

7.3 Telegraph-Image#

1
github.com 搜 Telegraph-Image
  • 基于 Telegraph 的免费图床
  • Workers 部署,无需服务器
  • 速度看 CF
  • 缺点:图片放别人家有跑路风险

八、第三方公共图床#

仅适合临时用 / 不重要的图——所有第三方图床都有跑路 / 防盗链 / 突然清空 的可能。

图床速度限制备注
sm.ms国内外都还行注册后 5MB / 张老牌、最稳的公共图床
imgur海外快国内被墙国际标准,文档/issue 友好
PostImage海外快国内一般老牌
upload.ccCF CDN永久存储香港人开
微博图床国内极快防盗链需要登录微博 cookies
聚合图床看后端一图多床superbed.cn

⚠️ 微博图床防盗链越来越严,已经基本不适合做技术博客的图床。

九、批量替换工具:从旧图床迁到新图床#

写了一堆 markdown 文章后想换图床?两类思路:

9.1 改 DNS 不改文章(推荐)#

只要:

  1. 旧图床域名是你自己的(如 img.your-domain.com)
  2. 新后端的文件名和旧的一致

把 DNS 切到新后端,所有文章一行不用改。

9.2 实在要改 markdown 的批量替换#

Terminal window
1
# Linux/macOS
2
find /path/to/blog -name "*.md" -exec \
3
sed -i 's|old-domain.com|new-domain.com|g' {} +
4
5
# macOS(BSD sed 要加空字符串)
6
find /path/to/blog -name "*.md" -exec \
7
sed -i '' 's|old-domain.com|new-domain.com|g' {} +

或者写个 Python 脚本检测哪些文件包含旧域名图片,需要迁移:

1
import os
2
import re
3
from pathlib import Path
4
5
PATTERN = r'!\[([^\]]*)\]\((https://old-domain\.com/[^)]+)\)'
6
7
def scan(target_dir):
8
for md_file in Path(target_dir).rglob('*.md'):
9
with open(md_file, 'r', encoding='utf-8') as f:
10
content = f.read()
11
matches = re.findall(PATTERN, content)
12
if matches:
13
print(f"{md_file}: {len(matches)} 张待迁移")
14
15
scan("/path/to/blog")

十、CDN 缓存优化#

R2 / B2 都按请求次数计费。挂上 CF CDN 后,绝大多数请求会被 CDN 命中,根本不会回源。

CF 控制台 → Caching → Cache Rules → Create rule:

字段值
Rule namer2-images-cache
If Hostname equalsimg.your-domain.com
Eligible for cache✅
Edge TTL1 month
Browser TTL7 days

之后 R2 的 Class B 请求会降到原来的 5%-10%。

十一、几条实用经验#

  • 自己的域名 = 主权:第三方图床域名挂掉就完蛋,自己域名能随时切后端。
  • {md5}.{extName} 永远不要换:换命名规则等于所有旧链接重传。
  • R2 主 + B2 备:双对象存储双保险,年成本 < $1。
  • PicList 比 PicGo 顺手:建议直接 PicList,PicGo 没必要再装。
  • 不要依赖公共图床做技术博客:sm.ms 这种最稳的也曾经停服一阵。
  • 截图剪贴板上传是核心生产力:Win + Shift + S → 截图 → 复制 → PicList 自动上传 → 返回 markdown,三秒搞定。

按这套配下来,写博客插图体验丝滑、年成本几乎为 0、未来切换零成本。

对象存储横评:R2 / B2 / 七牛 / Tebi / 缤纷云 / S3 怎么选
mihomo / Clash 规则进阶:fake-ip + DNS 分流 + no-resolve
本博客所有文章除特别声明外,均遵循 CC BY-NC-SA 4.0 协议,转载请注明出处。
博客框架 Astro & Fuwari
冀ICP备20260167号
1
一、图床方案地图
2
二、推荐方案:R2 + PicList(自用首选)
2.1 为什么 PicList 比 PicGo 好
2.2 PicList 接 R2 的关键配置
3
三、文件命名模板:{md5}.{extName} 是圣经
4
四、命名一致性 = 后端可随时切换
5
五、迁移备份脚本(rclone)
6
六、其它对象存储方案
6.1 Backblaze B2 + Cloudflare CDN
6.2 七牛云
6.3 又拍云
7
七、自部署开源图床
7.1 EasyImages2.0
7.2 OneImg(初春图床)
7.3 Telegraph-Image
8
八、第三方公共图床
9
九、批量替换工具:从旧图床迁到新图床
9.1 改 DNS 不改文章(推荐)
9.2 实在要改 markdown 的批量替换
10
十、CDN 缓存优化
11
十一、几条实用经验