写博客绕不开图片托管:正文里十几张截图、封面图,总不能都塞进 Halo 自带的 upload 目录,一是挤占服务器空间,二是迁移麻烦。最省心的做法是独立图床 + 自定义域名,图片和博客解耦,想换博客程序图片链接也不用动。
这套配置我是在整理服务器时顺手搞定的,从选图床到全链路验证一次跑通。本文按「架构 → 配置 → 验证 → 排查」讲透,配完的图片链接长这样:https://img.swlt.work/img/xxx.png。
图床方案里我选了 腾讯云 COS(对象存储)+ EdgeOne 加速 + 自定义域名:
- COS 存储桶私有读写,图片只通过自定义域名对外访问;
- 自定义域名走 EdgeOne,国内访问快,还能顺带缓存;
- 客户端用 PicList(PicGo 的增强版),拖图即传、返回可公网访问的链接。
架构(全链路)
| 环节 | 组件 |
|---|---|
| 存储 | COS 存储桶(地域 ap-guangzhou,私有读写) |
| 加速 | 自定义域名 img.swlt.work 经 EdgeOne 加速、回源到该桶(DNS CNAME 已配) |
| 备案 | 域名已备案 |
| 客户端 | PicList(Windows 版) |
| 全链路 | https://img.swlt.work/img/xxx.png 可正常访问 ✅ |
所需信息
配置前先准备好这几项(密钥用你自己的):
| 配置项 | 值 |
|---|---|
| 存储桶名称 Bucket | imgbed-你的AppId 格式 |
| 地域 Region | ap-guangzhou |
| SecretId | <你的SecretId> |
| SecretKey | <你的SecretKey> |
| 自定义域名 | https://img.swlt.work |
| 建议上传路径前缀 | img/ |
密钥从哪来:到腾讯云控制台 → 访问管理 CAM → 新建子账号,只给它
QcloudCOSFullAccess(对象存储读写)权限,再创建一对 API 密钥。别用主账号密钥,泄露了能删你整个账号的东西。
安装 PicList
- 官网下载 Windows 版:piclist.cn(GitHub 备选:Kuingsmile/PicList/releases,选最新
PicList-x.x.x-win.exe); - 安装后打开,界面和 PicGo 差不多。
配置腾讯云 COS
启用 COS 图床
PicList 通常已内置腾讯云 COS 支持:
- 左侧图床设置 → 看是否已有「腾讯云 COS / Tencent COS」,有则直接点进去配置;
- 没有的话到顶部插件设置 → 搜索
cos→ 安装picgo-plugin-tencent-cos→ 安装后图床设置里出现对应入口。
填写配置
| 字段(参考) | 填写值 |
|---|---|
| SecretId | <你的SecretId> |
| SecretKey | <你的SecretKey> |
| Bucket | imgbed-你的AppId |
| 地域 Area / Region | ap-guangzhou |
| Path(可选) | img/ |
| 自定义域名 CustomUrl | https://img.swlt.work |
重点:自定义域名必填。 填了它,上传返回的链接才是 https://img.swlt.work/img/xxx.png;不填则返回 COS 默认域名 xxx.cos.ap-guangzhou.myqcloud.com——这个域名走 COS 源站、因为桶是私有的,不能直接公网访问。
设为默认图床
- 图床设置页勾选「设为默认图床」;
- 若有多个图床,关掉不需要的,避免传错地方。
验证
- 拖一张图片进上传区,或点上传按钮选文件;
- 看上传记录:应显示上传成功,链接为
https://img.swlt.work/img/文件名.png; - 浏览器打开该链接,能正常显示 = 成功;
- 再验证剪贴板上传:截图(Win+Shift+S)→ 上传区 Ctrl+V → 上传 → 复制链接。
常见问题排查
| 现象 | 原因 | 处理 |
|---|---|---|
上传报错 AccessDenied / 403 |
SecretId/SecretKey 错误,或该子账号无 COS 权限 | 核对密钥;到 CAM 检查子账号权限是否含 QcloudCOSFullAccess |
| 上传成功但链接打开 403 | 链接用了 COS 默认域名(私有桶不公开放行) | 确认自定义域名已填为 https://img.swlt.work,重新上传 |
| 链接打开 404 | 文件名/路径不对,或 EdgeOne 缓存未命中源站 | 检查上传路径前缀;用浏览器直接访问一个已知存在的对象路径验证 |
| 链接打开超时 | DNS 或 EdgeOne 域名状态问题 | 确认 DNS 记录 img → CNAME → img.swlt.work.eo.dnse2.com 存在;确认 EdgeOne 中源站为 COS 桶且私有存储桶访问已开启 |
经验
- 私有桶 + 自定义域名是图床的正确姿势。桶设私有,图片只能走你配了 EdgeOne 加速的域名出去,既省流量又安全——默认域名在私有桶下根本打不开,很多人卡在这一步。
- 子账号密钥 + 最小权限。图床密钥只给
QcloudCOSFullAccess,泄露了也能随时在 CAM 禁用,不会连累主账号。 - 图床和博客解耦。图片独立托管后,换博客程序、搬服务器都不影响正文里的图片链接。
感谢他们为本文做出的贡献
https://github.com/Kuingsmile/PicList