使用 PicGo 管理 Markdown 图床上传
平时使用 Obsidian 或 Markdown 写笔记时,图片是一个比较麻烦的问题。
如果直接把图片保存到本地,Markdown 中通常会出现:

本地使用没有什么问题,但如果笔记还需要发布到博客、GitHub 或其他平台,就需要额外处理附件目录和图片路径。
使用 PicGo 后,可以把图片上传和链接生成这一步自动化:
截图 / 图片
↓
PicGo
↓
上传到图床
↓
生成图片 URL
↓
写入 Markdown
这样 Markdown 中只需要保存最终的图片链接:

PicGo
PicGo 是一个图片上传工具,可以将本地图片、截图或者剪贴板中的图片上传到图床,并自动生成对应的访问地址。
GitHub 地址:PicGo
PicGo 本身支持多种图床,也可以通过插件扩展其他存储服务。
对于 Markdown 场景,最终需要的其实就是:
本地图片
↓
PicGo
↓
图床
↓
图片 URL

安装插件
PicGo 的扩展能力主要通过插件提供。
进入:
插件设置
可以搜索并安装需要的插件。
如果使用 S3 Compatible Storage,可以搜索对应的 S3 插件。注意,选择 wayjam 提供的版本。

S3 图床
使用 S3 Compatible Storage 时,整体结构比较简单:
PicGo
│
│ S3 API
▼
Bucket
│
▼
Object
│
▼
图片 URL
一般需要准备下面几个参数:
Endpoint
Bucket
Region
Access Key
Secret Key
不同对象存储服务在字段名称上可能略有区别,但实际对应的信息基本相同。

图片路径
如果长期使用图床,不建议直接使用原始图片名称,例如:
image.png
image-1.png
截图.png
随着图片越来越多,很容易遇到重名或者覆盖的问题。
我更喜欢使用图片内容的 Hash 作为文件名,例如:
screenshots/{sha256:0,2}/{sha256:2,2}/{sha256}.{extName}
生成后的路径类似:
screenshots/70/aa/70aa7019b0751efd1369db0312bc548445ec79ab486a2f7b1aa9c4a3afd824bc.png
目录结构:
screenshots
└── 70
└── aa
└── 70aa7019b0751....png
这样做有两个比较明显的好处:
- 基本不会发生文件名冲突
- 同一张图片可以得到稳定的文件名
最终生成的图片地址类似:
https://s3.example.com/screenshots/70/aa/70aa7019b0751....png
S3 插件配置
安装 S3 插件后,在 PicGo 中填写对象存储的信息。
例如:

- 应用密钥 ID:xxx,从 s3 服务器获取
- 应用密钥:xxx,从 s3 服务器获取
- 桶名:bucket 的名字,从 s3 服务器获取
- 上传文件路径,上传后,文件的相对 URL 路径,推荐
screenshots/{sha256:0,2}/{sha256:2,2}/{sha256}.{extName},注意,这个与插件相关,如果用别的插件,请注意对方是否有对应的配置 - 地区:一般没有特殊要求的话
auto就可以 - 自定义节点:服务器的路径,例如
https://s3.example.com

- 代理:一般不配置,根据需求来
- 拒绝无效的 TLS 证书连接:如果链接是 HTTPS 的,选择为 yes,否则为 no
- ACL 访问控制列表:保持默认
- ForcePathStyle:S3 的 Bucket 访问通常有两种形式:
- Path Style:Bucket 名称放在 URL 路径中,例如:
https://s3.example.com/my-bucket/screenshots/example.png- Virtual-hosted Style:Bucket 名称作为域名的一部分,例如:
https://my-bucket.s3.example.com/screenshots/example.pngForcePathStyle设置为yes时,会强制使用 Path Style;设置为no时,通常使用 Virtual-hosted Style。
对于自己搭建的 S3 服务,如果没有专门配置 *.s3.example.com 这样的通配符 DNS 和证书,一般推荐设置为:
ForcePathStyle:yes
这样只需要配置一个 S3 域名,例如:
https://s3.example.com
Bucket 会自动作为 URL 路径的一部分。
- 其余保持默认即可

- bucket 前缀:与前面的 ForcePathStyle 类似,根据实际配置选择
- 点击确定以保存配置
配置完成后,可以直接从 PicGo 上传一张测试图片,截图,点击剪贴板图片

上传成功后,PicGo 会返回 markdown 格式的链接

例如:

腾讯云 COS
腾讯云 COS 也可以通过 S3 插件进行配置。
认证信息对应:
应用密钥 ID:SecretId
应用密钥:SecretKey

Bucket 相关信息可以在腾讯云 COS 控制台中查看:
Bucket 名称:存储桶名称
Region:所属地域

例如 Bucket 的默认访问地址为:
https://my-bucket.cos.ap-beijing.myqcloud.com
在 PicGo 的 S3 插件中,自定义节点填写:
https://cos.ap-beijing.myqcloud.com
Bucket 名称单独填写:
my-bucket
其他选项:
拒绝无效 TLS 证书连接:开启
ACL:默认
ForcePathStyle:关闭
Bucket 前缀:开启
上传完成后,图片地址类似:
https://my-bucket.cos.ap-beijing.myqcloud.com/screenshots/70/aa/example.png
Markdown:

配合 Obsidian
PicGo 和 Obsidian 配合以后,可以进一步简化图片插入流程。
理想的操作方式是:
截图
↓
复制到剪贴板
↓
Obsidian 中粘贴
↓
PicGo 上传图片
↓
自动生成图片 URL
↓
插入 Markdown
最终笔记中只会留下:

而不需要在 Vault 中额外维护:
attachments/
assets/
images/
下载插件 Image auto upload,配置如下

随后,在 obsidian 中粘贴,点击图片,可以看到已经是一个链接了

总结
PicGo 可以把原本需要手动完成的图片上传过程统一起来:
图片
↓
PicGo
↓
S3 Compatible Storage
↓
图片 URL
配合 Obsidian 后,整个过程可以进一步变成:
截图
→ 粘贴
→ 上传
→ 生成 Markdown 图片链接
最终 Markdown 中只保存图片 URL,图片本身统一由图床管理。