💡写技术博客最崩溃的瞬间不是写不出来,是某天回头点开自己半年前的文章,发现配图全裂了。
很多 Java 同学的图床路径都差不多:先建个 GitHub 仓库当图床,配 jsDelivr CDN,觉得挺美;后来 GitHub 的 raw 链接在国内时断时续,就顺手把图直接传到 CSDN——直到有一天想把文章同步到自己的博客站,发现那些图要么带着水印,要么域名一换就 404。更麻烦的是,图这种东西一旦散落在五六个平台里,你就再也拿不回"原始资产"了。
这里真正需要想明白的是一件事:图床不是"能传图"就完事,它背后是存储、带宽、域名、合规四笔账。免费方案不是不能选,而是要清楚自己把哪一项交出去了。
这篇文章把我踩过的和查证过的方案摊开对比一遍:传统方案到底坏在哪,Cloudflare R2 为什么是当下个人博主的默认答案,Telegraph 这类"白嫖"路线的风险边界在哪,国内对象存储的门槛具体卡住谁,最后给一棵能直接照着走的决策树。
1. 先把标准立起来:图床到底在提供什么
别急着比方案,先看它替你扛了哪几件事。
一个看起来"只是存图片"的东西,实际同时要满足四个条件:图片有地方放、公网有一条稳定可访问的 URL、有人替你把访问的带宽钱结了、这套东西不会因为平台改规则就一夜失效。
图床 = 存储 + 一条公网可访问的域名 + 带宽账单有人付 + 规则稳定 ↑ ↑ 免费方案通常省在这 翻车通常翻在这简单理解:大厂方案贵在后两项,白嫖方案省掉的后两项迟早要以别的形式还回去。
按这四条把常见方案归个类:
| 路线 | 代表 | 存储 | 带宽成本谁扛 | 域名可控 | 主要风险 |
|---|---|---|---|---|---|
| 代码仓库当图床 | GitHub / Gitee | 仓库文件 | 平台(所以会限流) | ❌ | 平台改规则、国内连通性 |
| 博客平台自带 | CSDN / 掘金 / 知乎 | 平台图库 | 平台 | ❌ | 防盗链、URL 不可迁移 |
| 对象存储(境外) | Cloudflare R2/ AWS S3 | 你自己的 bucket | 你自己(R2 出口免费) | ✅ | 国内直连速度 |
| 对象存储(国内) | 七牛云 / 腾讯云 COS / 阿里云 OSS | 你自己的 bucket | 你自己 | ✅(要备案) | 备案门槛、按量账单 |
| 寄生第三方服务 | Telegraph / SM.MS | 别人的服务 | 别人 | ❌ | 随时失效 |
这张表里最值钱的一列是"域名可控"。域名在你手里,图床就能换;域名不在你手里,你写过的每一篇文章都被那个平台锁死了。
2. 传统方案为什么开始不好用
不是它们变差了,是免费额度被用滥之后平台收紧了。
2.1 GitHub 当图床:慢在哪,为什么 CDN 也救不回来
Q1:GitHub + jsDelivr 这条路为什么不算方案了?
GitHub 仓库的 raw 链接本质是代码分发通道,不是给图片准备的:没有图片优化(原图多大传多大)、没有针对高并发静态资源的缓存策略,国内访问 raw.githubusercontent.com 长期不稳定。
以前大家的补法是套一层 jsDelivr CDN。这条路后来时断时续,原因是 jsDelivr 在中国大陆的可访问性受备案与解析策略影响,具体到某个时间点能不能用,跟你的运营商、地区都有关系——所以它已经不具备"当作基础设施"的确定性。
我的判断:能访问 ≠ 稳定可依赖。判断一个图床能不能用,别看"我现在打得开",要看它的 SLA 和你的文章是不是同一条命。
2.2 CSDN 自带图床:一个被误解最深的点
Q2:CSDN 的图片真的强制带水印、且搬不走吗?
这两件事都值得纠正一下,因为它们是很多人被迫换图床的直接原因,但说法过粗。
| 传闻 | 实际情况 | 说明 |
|---|---|---|
| 上传的图片强制加水印 | 可以在博客设置里关闭 | 入口在个人主页的"管理博文 → 博客设置 → 图片水印",关闭后不再自动打水印(对已上传的历史图片无效) |
| 图搬不走 | 图片本身能下载,但 URL 归属平台 | 关键问题不是"下载不下来",而是链接不稳定:域名和防盗链策略由平台决定,你把文章迁到自己站,图还是它的 |
| 防盗链影响其他平台显示 | 确实存在 | 直接引用 CSDN 图床地址到外部站点,可能被拒绝或被替换 |
比较有意思的是,很多人被水印困扰多年,其实只是没去翻那个开关——这种"平台默认设置"造成的迁移成本,比技术限制更常见。
所以真正的结论是:CSDN 图床的问题不在于能不能上传,而在于图不在你手里。平台默认值可调,归属权调不了。
2.3 Gitee:曾经的国内首选,现在门槛变了
Gitee(码云)当年的 raw 直链是国内最顺的免费图床,后来因为被大规模滥用,公开仓库的文件直链访问收紧,需要登录或走已绑定备案域名的服务才能稳定访问。这条路的可用性我不建议在文章里当事实引用,具体到你账号上的表现,以自己实测为准。
一句话小结:仓库型图床的问题高度一致——你在用别人的免费通道跑自己的长期资产。
3. Cloudflare R2:为什么它是当下个人博主的默认答案
它不是最便宜的,是唯一四项都及格的。
R2 是 Cloudflare 的对象存储服务,直接对标 AWS S3 和阿里云 OSS。它之所以在这两年变成技术博主的默认选项,靠的是一个非常具体的设计:不收出口流量费。
3.1 免费额度:官方数字长什么样
以下取自 Cloudflare 官方 R2 定价页(2026-09 核对):
| 项目 | 免费额度(每月) | 超出后单价 |
|---|---|---|
| 存储 | 10 GB-month | $0.015 / GB-month |
| A 类操作(写入类) | 100 万次 | $4.50 / 百万次 |
| B 类操作(读取类) | 1000 万次 | $0.36 / 百万次 |
| 出口流量(Egress) | 免费 | 免费 |
对一个个人博客来说,10 GB 存储 + 每月一千万次读取是很宽裕的量级。一篇带 10 张图的博文,假设图片平均 300 KB,一万 PV 也才消耗 3 GB 出口——而 R2 这一项根本不进账单。
3.2 免出口流量费这件事,到底省了什么
Q3:对象存储的费用为什么常常"看不贵但账单很高"?
因为传统对象存储的计费大头不是存储,是访问。存储 100 GB 在 S3 上一个月也就十几美元,但如果这些图每天有真实访问量,出口流量费会一路叠上去,而且它跟你有没有赚钱无关。这也是 Cloudflare 自己把出口流量拿出来做卖点的原因——它把最容易失控的那一项直接归零了。
S3 类账单 = 存储费 + 请求费 + 出口流量费(大头,随访问量线性涨) R2 账单 = 存储费 + 请求费 + 0文中我只做"按 GB 收出口流量费"和"免费"的定性对比,没有核对 S3 当前的具体单价——真要算钱的时候请以官网当期价格页为准。
3.3 它的短板很明确:国内直连
R2 的免费 CDN 节点在中国大陆没有专门优化,直连体验常被调侃成"赛博减速带"。这也是它对国内读者最大的减分项。
| 问题 | 解法 | 代价 |
|---|---|---|
默认*.r2.cloudflarestorage.com域名慢且不好记 | 绑定自定义域名(走 Cloudflare 解析) | 需要一个域名 + 一次配置 |
| 未备案域名能否解析 | 域名解析在 Cloudflare 侧、服务器在境外,不涉及国内备案要求 | 但也就享受不到国内 CDN 节点 |
| 想进一步提速 | 前置一层国内 CDN(需备案)或换国内对象存储 | 复杂度、成本上升 |
我的判断是:R2 的国内速度是"能用但不出色",而不是"不可用"。如果你的读者主要在国内、又在意首屏图片秒开,那第 5 节的国内对象存储才是终点站;但如果你只想花最少精力拿到一个稳定、无水印、域名归自己、不会因为改规则就裂图的地方,R2 是当下的最优解。
3.4 落地路径(一次配好,长期不用管)
建 bucket --> 绑定自定义域名(开启公开访问) --> PicGo 配 R2 插件 --> 写作时只剩一个快捷键需要留心的两个细节:一是把 bucket 的公开访问通过自定义域名暴露,不要把r2.cloudflarestorage.com的裸链接写进文章;二是 AK/SK 只给这个 bucket 的最小权限,别用账号级密钥——这是对象存储最常见的安全事故来源。
4. Telegraph 与 SM.MS:白嫖路线的风险边界
不是不能用,是不能用在重要的地方。
Telegraph 图床 是一类开源玩法:用 Cloudflare Workers 做一层反向代理,把图片实际投递到 Telegram/telegra.ph 侧,返回一个i.telegra.ph开头的直链。
你的 Markdown --> i.telegra.ph 链接 --> Cloudflare Worker(反代) --> Telegram 服务器 ↑ 真正的存储不在你手里,也不在 CF 手里| 维度 | 表现 | 说明 |
|---|---|---|
| 成本 | 免费、接近不限量 | 有单文件大小上限,具体阈值各实现不一,需以自己用的那个项目为准 |
| 水印 | 无,原图上传原图返回 | 这一点对代码截图很友好 |
| 国内速度 | 走 CF 节点,时好时坏 | 取决于当时链路 |
| 可持续性 | 三个独立失效点 | 见下 |
为什么我不推荐它当主力,原因不是"慢",而是它的可用性由三个你不控制的环节决定:
- 底层依赖 Telegram。Telegram 本身在大陆不可直连,整条链路靠 Worker 中转,策略一变就可能整体失效。
- Cloudflare 侧的滥用判定。大量代理流量、被人刷接口,都可能触发 abuse 机制,轻则限流重则封号,而且申诉周期不受你控制。
- 上游接口变更。这类项目依赖 telegra.ph 的非公开上传行为,官方并不鼓励把它当无限图床用,接口一变,开源实现可能直接停更。
SM.MS 属于另一类:老牌、有官方接口和客户端生态,但它同样是"第三方免费额度",历史上就调整过策略。
一句话理解:把 R2 当保险箱,把 Telegraph 当共享单车。共享单车不是坏东西,但你不会把房产证塞在车筐里。临时发个群、贴个一次性讨论帖,用它很爽;三年前的技术文章靠它撑图,就是在赌别人的服务永久免费。
5. 国内对象存储 + CDN:满血形态和它真正卡人的地方
速度天花板在这里,门槛也在这里。
如果你打算长期认真做内容,或者读者主要在国内,国内云厂商的对象存储才是终点。七牛云是这条路上最老牌的图床选择,它的免费额度我核对过一次(取自官网价格页,2026-09):
| 项目 | 七牛云免费额度 |
|---|---|
| 标准存储空间 | 10 GB |
| CDN 回源流量 | 10 GB |
| 写请求 | 10 万次量级 |
| 读请求 | 100 万次量级 |
腾讯云 COS 和 阿里云 OSS 同样有面向新用户的免费或试用额度,但这类活动额度变动频繁、时长和容量各期不同,我这次没能核到可靠的当前数字,所以不写进表里——你在选型时直接看官网当期活动页,别照抄任何博客里的数字(包括这句)。
5.1 三个方案的定位差别
| 服务商 | 国内速度 | 免费额度 | 核心门槛 | 适合谁 |
|---|---|---|---|---|
| 七牛云 | ⭐⭐⭐⭐⭐ | 每月 10 GB 存储 + 10 GB 回源流量 | 需绑定已备案域名 | 老牌图床用法,个人博客首选 |
| 腾讯云 COS | ⭐⭐⭐⭐⭐ | 以当期活动为准 | 需绑定已备案域名 | 已在腾讯云生态里的人 |
| 阿里云 OSS | ⭐⭐⭐⭐⭐ | 以当期活动为准 | 需绑定已备案域名 | 已在阿里云生态里的人 |
说明:⭐⭐⭐⭐⭐ 表示"国内读者访问能秒开、不需要额外加速层",是我按自己实际打开速度的主观分档,不是压测结论。
5.2 门槛到底是什么
Q4:备案这道坎,卡住的究竟是谁?
卡住的不是钱,是时间和确定性。
想用国内 OSS 满血形态 = 有自己的域名 + 域名完成 ICP 备案 + 配置 CDN 加速 ↑ 这一步通常要 1~3 周,且主体资料要一致也就是说:如果你还没有备案域名,国内对象存储这条路在你拿到备案之前是不通的——不是慢,是默认域名会被限速或拦截。反过来,如果你手上已经有一个备案域名(很多认真写博客的人都有),那国内 OSS + CDN 的访问体验是 R2 给不了的。
这里有个容易被忽略的组合打法:主站走国内 OSS,历史文章和备用镜像走 R2。两边同域名前缀切换,写作的 Markdown 不用动。
6. 比选型更重要的一件事:把上传链路解耦
图床会换,写作习惯不该跟着换。
我在这个环节上得到的最大教训是:真正决定你会不会裂图的,不是选了哪家,而是图片 URL 是怎么进入你的 Markdown 的。
推荐的工作流是 PicGo(开源免费):
截图 --> 全局快捷键 --> PicGo 上传到当前图床 --> Markdown 图片链接自动进剪贴板 --> 粘贴写作PicGo 原生支持阿里云 OSS、腾讯云 COS、七牛、SM.MS 等;Cloudflare R2 和 Telegraph 这类走插件。它的核心价值不是"省事",而是把图床配置和写作过程分开:
- 换图床时只改 PicGo 的配置项,你的截图习惯、命名习惯、写作动作一样不动;
- URL 前缀由工具统一生成,不会出现同一个仓库里三种域名混着写的情况;
- 万一将来要批量迁移,前缀统一意味着一次正则替换就能改完。
顺带三个约定,比选哪家影响更大:
| 约定 | 为什么 |
|---|---|
| 图片文件名不带空格、中文、大写 | 减少跨平台 URL 编码带来的 404 |
本地仓库保留原图(images/或图床的同步目录) | 图床只是发布通道,不是唯一副本 |
| 定期爬一遍自己站点找裂图 | 失效往往发生在几个月后,靠人肉发现不现实 |
最后一条可以脚本化:把站内所有 Markdown 拉出来,正则提出图片 URL,逐个发 HEAD 请求,非 200 的列清单。这是唯一能保证你不在某天早上看到满屏裂图的机制。
7. 所以到底怎么选
按你现在手上有什么决定,不要按哪个最便宜决定。
有已备案的国内域名吗? ├── 有 ──────────> 七牛云 / 阿里云 OSS / 腾讯云 COS + CDN(国内体验最优解) └── 没有 ├── 要稳定、在意数字资产 ──> Cloudflare R2 + 自定义域名(最推荐) ├── 连域名都不想弄 ──────> SM.MS,或 Telegraph(自己承担裂图风险) └── 有轻量服务器 ────────> 自建 EasyImage / ImgURL(完全可控,也完全自己负责)笔者(后端 & 架构)的实践策略:
| 场景 | 我的选择 | 理由 |
|---|---|---|
| 自己的长期技术博客 | R2 + 自定义域名 | 域名归我、无出口流量费、不依赖国内备案进度 |
| 读者在国内、要求首屏秒开 | 七牛云 + 备案域名 + CDN | 这一层 R2 打不过 |
| 临时讨论、群里贴图 | PicGo 走 Telegraph | 反正不是长期资产 |
| 已经发在 CSDN 的历史文章 | 先把图全量下载回本地 | 迁移成本只会在你想迁的那天出现 |
| 团队协作 / 内部文档 | 自建或云厂商内网桶 | 外部图床不能承载内部资料 |
一句话结论:图床的选型题,本质是"你愿意为可控性付多少复杂度"。R2 用一次域名配置换来长期不裂图,Telegraph 用零配置换来不确定的未来,国内 OSS 用备案换来最优速度——三条路都对,只看你能不能接受各自的那一项代价。
最后总结
- GitHub / Gitee 当图床:不是慢的问题,是平台规则不由你定,直链收紧后没有补救余地。
- CSDN 图床:水印可以在博客设置里关掉(这点很多人不知道),真正的硬伤是图片 URL 归属平台,迁站即失效。
- Cloudflare R2:官方免费额度是每月 10 GB 存储 + 100 万次 A 类 + 1000 万次 B 类操作,出口流量完全免费;短板是国内直连速度,绑自定义域名能明显改善。
- Telegraph / SM.MS:无水印、零成本、上手最快,但可用性建立在三个你不控制的环节上,只适合临时用途。
- 国内对象存储(七牛 / 腾讯云 COS / 阿里云 OSS)+ 备案域名 + CDN:体验天花板,门槛是备案这件事本身。
- 无论选哪家,用 PicGo 把上传链路解耦,并且在本地保留原图——这条比选型重要。
- 对后端 / 架构开发者,我更在意的是:图片是内容资产的一部分,资产要有可迁移的标识(域名)和至少两份副本。
一句话结论:先确定域名归谁、原图留几份,再谈哪家便宜——顺序反了,迟早要花钱买回一次迁移。
参考资料 & 致谢
[1] R2 定价 - Cloudflare 开发者文档
[2] R2 产品页 - Cloudflare 官网
[3] 什么是数据出口费用?- Cloudflare Learning Center
[4] R2 定价计算器 - Cloudflare
[5] 七牛云对象存储 Kodo 价格页
[6] 腾讯云对象存储 COS 官网
[7] 阿里云对象存储 OSS 官网
[8] CSDN 关闭自动添加水印的设置说明 - CSDN 博客
[9] PicGo - 图床上传工具文档
[10] telegra.ph 上传接口封装(社区实现)- GitHub
[11] 利用 Telegraph 的基础设施搭建一个图床 - 社区实践文章
[12] telegra.ph - 内容发布服务
[13] SM.MS - 图床服务
[14] jsDelivr GitHub CDN 文档
[15] Gitee 码云官网