这是公众号教程的站内阅读版。教程界面配图基于 v1.4.22;当前可领取版本和更新说明请查看工具领取页。
教你如何搭建免费的私有图床:网页后台+R2+拾玖图床
先看懂这些词,再动手
Cloudflare 是一个提供网站网络、安全与云服务的平台。R2 是它旗下存放图片、PDF 等文件的云端仓库。
可以叫它一声“赛博大善人”:R2 标准存储有免费额度,公网出网流量不收费;存储和请求超出额度仍会计费。查看官方计费说明。
- 图床
- 把图片或文件上传后,返回一个可分享链接的服务。
- 存储桶(Bucket)
- R2 里的一个文件容器,类似专门放这套图床文件的“大文件夹”。
- API(接口)
- 软件之间办事的入口;桌面工具通过它向网页图床提交文件。
- 令牌(Token)
- 给软件用的通行证。上传令牌允许上传;部署令牌用于配置服务;统计授权用于看用量,三者不能混用。
- 域名 / 子域名
- 方便记忆的网址名称;如 example.com 是域名,img.example.com 是给图床用的子域名。
- 公网访问
- 拿到文件链接的人能从互联网打开它。公开文件不代表公开上传和管理权限。
- Worker / 部署
- Worker 是运行在 Cloudflare 云端的小程序;部署就是把图床程序放上去,让它开始提供服务。
- KV(键值存储)
- 保存配置和文件说明的“小账本”;图片和 PDF 本体仍放在 R2 里。
- HTTPS / TLS
- 让传输中的数据加密,减少被旁路偷看的风险;不是把公开文件变成只有你能看。
- GitHub / Fork / Actions
- GitHub 存放项目代码;Fork 是复制一份到自己账户;Actions 按流程构建和部署。
需要智能体协助完成部署?打开分阶段部署助手,逐步复制对应提示词,并在每一步完成验收。
作者:拾玖Blues|公众号:拾玖说跨境AI
更新:2026-10-27|桌面版 v1.4.22|网页端基于 CloudFlare-ImgBed

这次搭的是带网页管理后台的图床。R2 保存文件,CloudFlare-ImgBed 提供上传接口和管理页面,拾玖图床桌面工具负责拖入、预览和批量上传。
上传路径是:桌面工具 → 图床上传 API → R2。读取路径是:图床域名 /file/文件名 → Worker → R2。桌面工具填写的是图床地址和上传令牌,不是 R2 Access Key。

这里的“私有”指自主管理上传权限;按本文配置的文件链接可以公开读取,并不等于私密网盘。“免费”指相关服务免费额度内使用。R2 之外,Workers、KV 也有各自额度,域名注册和续费可能另付费,不能承诺整套永远零账单。
准备:Cloudflare 账户、GitHub 账户、已接入 Cloudflare 的自有域名;使用桌面工具需要 Windows。本文按照作者现有 Workers+KV+R2 方案整理,不混用 Pages、D1 或 S3 直连路线。历史激活图和作者后台图为真实截图;配置流程图是示意;桌面截图使用演示数据。
做产品运营,为什么用这套图床?
整理产品资料时,麻烦的不只是把图片传上去,而是上传以后还能认出来:这条链接对应哪个产品、哪张主图、哪张细节图。
拾玖图床会保留原文件名主体,再添加时间戳后缀。如果开启“包含文件夹名”,目录名也会加到文件名前面。例如,本地的 商品A/细节/侧面.jpg,上传后可以命名为 商品A_细节_侧面_20261027_183000_123.jpg。
返回链接末尾的文件名,与云端保存的文件名保持一致。看链接就能辨认产品、目录和图片用途,再对照本地原图核查。这里保留的是原文件名主体,并非上传前后每个字符都不变:时间戳、可选目录名会加入文件名,特殊符号在 URL 中可能采用编码形式。
对需要提交产品模板、整理图片链接表的运营来说,这样更方便:
- 核对更直观。把链接填进产品模板后,可根据文件名与产品行、主图或细节图字段逐项核对,减少只看一串随机字符时的猜测。
- 批量整理更省事。按产品分好文件夹后一起拖入,包含子文件夹;选中多条记录复制链接,可按行粘贴到表格,再核对对应关系。
- 回查更容易。上传历史保留文件名、日期、大小和缩略图,支持文件名关键词与日期筛选,发现填错时更容易定位。
- 多次上传更好区分。时间戳便于区分同名图片的不同上传批次,减少新旧链接混淆。
它能帮助减少错配和混乱,但不会自动判断图片是否属于某个产品。提交模板前,仍应对照产品行、文件名和缩略图检查一次。
01|开通 R2,创建标准存储桶和 KV

进入 Cloudflare 的 R2 对象存储,按要求开通并确认付款方式,再创建标准存储桶,例如 my-imgbed-files。本文无需先创建 S3 Access Key。
R2 标准存储每月免费额度为 10 GB-month、100 万次 A 类操作、1000 万次 B 类操作,公网出网费为 0;超额仍计费,免费层不适用于低频存储。官方价格
然后进入 Workers KV,新建一个命名空间,例如 img_url,记录它的 ID。R2 装文件,KV 保存图床的配置与文件元数据。作者当前配置使用 KV,没有同时绑定 D1;上游也支持 D1,但那是另一条配置路线。
检查:R2 桶和 KV 都已建立,名称与 ID 分清楚。
02|部署网页图床,而不是只建一个桶

网页端使用开源项目 CloudFlare-ImgBed,遵循 MIT 许可证。以下采用它提供的 GitHub Actions Workers 部署方式;作者本机还有桌面端配套适配,不代表上游默认包含这些扩展。
- Fork 项目到自己的 GitHub 账户,并启用该仓库的 Actions。
- 创建用于部署的 Cloudflare API Token,按项目部署文档配置相应账户权限,记录账户 ID。这个 Token 只用于部署,不是桌面上传令牌。
- 在 Fork 仓库的 Settings → Secrets and variables → Actions → Secrets 添加下表配置。
| Secret 名称 | 填写内容 |
|---|---|
| CLOUDFLARE_API_TOKEN | 有部署权限的 Cloudflare Token |
| CLOUDFLARE_ACCOUNT_ID | 自己的账户 ID |
| KV_NAMESPACE_ID | 第一步创建的 KV ID |
| R2_BUCKET_NAME | 第一步创建的 R2 桶名 |
| WORKER_NAME | 自定 Worker 名称,例如 my-imgbed |
| WORKER_VARS | 业务配置 JSON,见下方示例 |
为避免新站裸露管理端,提前设置自己的管理员密码和用户访问码。下面只是一份占位模板,三个占位值必须自行替换,不能原样使用:
{
"BASIC_USER": {"value": "YOUR_ADMIN_NAME", "type": "text"},
"BASIC_PASS": {"value": "YOUR_UNIQUE_ADMIN_PASSWORD", "type": "secret"},
"AUTH_CODE": {"value": "YOUR_UNIQUE_USER_ACCESS_CODE", "type": "secret"}
}
进入 Actions → Deploy to Cloudflare Workers → Run workflow,等待完成。检查日志中部署和 Secret 写入都成功;失败时先修复,不要把失败状态当作完成。上游部署流程及所需权限请以Workers 部署文档为准。
检查:Cloudflare 中能找到 Worker;资源绑定里 KV 变量名是 img_url,R2 变量名是 img_r2。名称必须匹配程序读取的名称。
03|图床子域名绑定到 Worker

打开这个 Worker 的域名与路由设置,添加自定义域,例如 img.example.com,等待生效。这个域名对应网页图床 Worker,不是直接绑定到 R2 桶的文件域名。
访问 https://img.example.com/adminLogin,用自己配置的管理员账号登录;管理页面为 /dashboard。账号密码不是上传令牌,也不是 R2 密钥。

作者本地部署配置为前端静态资源启用了 SPA 回退,并优先让 /api/*、/upload、/upload/*、/file/* 等路径进入 Worker。若首页正常但 /dashboard 刷新 404,检查前端路由回退;若文件链接 404,检查 /file/* 是否进入正确的处理程序。不要靠反复刷新掩盖路由问题。
检查:登录后能看到管理后台;退出登录或在无痕窗口访问管理端,会要求认证。
04|后台启用 R2 渠道,再创建上传令牌

进入图床后台 系统设置 → 上传设置,核对 R2 渠道已启用,选用它作为默认上传渠道。Worker 绑定的 img_r2 提供存储访问,客户端无需掌握这份底层存储凭据。渠道配置说明
再进入 系统设置 → 安全设置,确认管理端认证、用户端上传认证均已设置。找到 API Token 管理,创建一个给桌面端使用的令牌,例如 Windows 桌面上传,归属自己的用户,权限按用途选择,先给上传权限;需要同步云端列表时加 list,确实要清空回收站并永久删除云端文件时才加 delete。保存完整令牌,填入桌面工具。
三类凭据别混:Cloudflare 部署 Token负责部署;后台账号密码负责管理员登录;图床 API Token负责客户端上传。
本方案的文件通过 Worker /file/ 读取 R2,因此 R2 桶可以保持公共访问禁用。R2PublicUrl 或额外公开桶域名只在特定渠道功能需要时另配,不是本文图床入口,也不是看到 404 就必须打开的开关。
检查:先在网页端上传一张不敏感图片,复制返回的完整文件链接,在未登录窗口打开;同时确认未授权用户不能上传。
05|桌面选择“图床 API”,填地址和令牌

打开拾玖图床设置,选择 图床 API(CloudFlare-ImgBed):
| 字段 | 填写示例 |
|---|---|
| 图床地址 | https://img.example.com |
| 上传 API 令牌 | 刚才在图床后台创建的令牌 |
地址填站点根地址,不附加 /adminLogin、/dashboard 或 /file/。测试连接后保存。这里不选“Cloudflare R2 直连”,也不填写 S3 密钥。
兼容范围:作者的网页端包含与桌面工具配套的接口适配,例如容量统计接口。使用未经适配的上游站点时,上传可用不代表桌面容量、云端同步等功能也可用;遇到接口 404 应核对版本和接口,不能靠换管理员密码解决。本文没有提供私人部署代码的公共下载地址。
06|主窗口先预览,悬浮窗直接上传

拖入图片、PDF 或整个文件夹,工具会扫描子文件夹。勾选包含文件夹名后,文件名示例为 商品A_细节_侧面_时间戳.png。预览名称与缩略图,再点击确认并上传。


主窗口拖入先生成预览,再点击确认上传;悬浮窗拖入会直接上传本次新增图片、PDF 或文件夹中的支持文件,跳过确认弹窗。不会顺带上传主窗口里原有的待上传文件。
成功后复制工具生成的 URL。中文可以显示为可读文字,但 #、% 等保留字符需要正确编码,勿手工把链接里的编码全部删掉。
07|网页管理与桌面历史配合使用

网页后台展示服务端管理的文件;桌面历史保存本机记录,两者数量不一定相同。在配套服务支持时,点击同步云端文件补齐列表,再按文件名关键词、上传日期筛选。选中多条复制链接,可以按行粘到表格。
“刷新选中链接”检查状态,不重新上传;网络超时不能直接认定文件丢失。清理本地失效记录也不等于删除云端对象。
08|移入回收站,确认清空才永久删除

在上传历史中选中记录,点击“移入回收站”。打开“回收站”后,可选中文件点击“恢复选中”,保留原来的文件名、URL、上传日期、大小和缩略图。重启工具后回收站仍保留,手动同步云端不会把这些文件重新加回历史。
回收站仅保存在本机 data 目录,不跨电脑同步,也不会自动清空。移入时没有删除云端文件,因此仍占云端容量,原链接仍然有效;如果通过其他工具或网页后台删掉了文件,本机恢复记录不能恢复文件内容。
只有点击“清空回收站(永久删除)”并确认,才真正删除云端文件。失败项留在回收站显示原因。图床令牌需要 delete 权限;本地历史备份不能恢复已经永久删除的云端文件。
09|上传令牌不等于用量统计授权

上传使用图床 API Token;账户用量需要另行配置统计授权。授权成功后工具刷新仪表盘。A/B 操作数按工具的 UTC 自然月口径汇总;存储环是当前快照对照 10 GB,不是本月 GB-month 计费结果。
还要分别查看 Workers 和 KV 用量,不能只看 R2 就认定整套服务没有费用。Workers 价格|KV 价格
上线前,用三项结果验收
- 不登录不能管理或上传;本人账号能正常登录后台。
- 网页与桌面各上传一张测试图,返回链接能在未登录窗口读取。
- 文件名含中文、空格、特殊符号时,复制链接仍能使用。
本文依据作者本地配置、代码和已有截图整理;本轮重新采集 v1.4.22 桌面演示截图并更新全部发布配图,没有重新部署服务或完成一遍线上上传验收;回收站清空逻辑使用模拟请求测试,没有删除作者真实云端文件。桌面 R2 直连是另一种用法,不属于本文主流程。
作者主站:blues19.com|资讯站:news.blues19.com
领取拾玖图床桌面工具
想用这款工具整理产品图片、批量上传并核对模板链接?
请在公众号文章评论区回复「我要领取图床工具」获取领取方式。