mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
1350 字
4 分钟
Typora 自动上传图片实践:PicGo App 与 PicGo-Core 两套方案踩坑记录
2026-03-15

写在前面#

我用的组合是 Typora + Cloudflare R2,图片访问走自定义域名,上传走 PicGo。理论上这套东西搭起来很顺,网上教程也不少,但实际弄的时候还是踩了几个坑。这篇就是把整个排查过程记下来,主要是给以后的自己看,顺便如果你也在用类似的组合,可能也能少折腾一会儿。

踩到的问题主要集中在三个地方:

  • Typora 自带的 PicGo-Core (command line) 版本太旧,跑不起来新插件
  • PicGo App 输入框里写正则和直接改 config.json 转义方式不一样
  • 开了 pathStyleAccess=true 之后,最终图片链接会莫名多一个桶名

Typora 自带的 PicGo-Core 先别用#

我最开始很自然地选了 Typora 偏好设置里的 PicGo-Core (command line),看着像官方做好的集成,结果测试图片上传直接报错:

[PicGo ERROR]: SyntaxError: Unexpected token '?'
[PicGo WARN]: Can't find uploader - smms, swtich to default uploader - smms
[PicGo ERROR]: Error: Can't find smms config

我以为是 S3 参数填错了,翻来覆去检查密钥、endpoint、bucket,折腾了一圈,最后才发现问题根本不在配置——是 Typora 自己下载到本地的那个 picgo.exe 版本太旧,新版的 aws-s3 插件根本加载不起来,加载失败之后又退回到默认的 smms 上传器,所以才一直报找不到 smms 配置。

所以如果你也碰到类似报错,可以先绕过这个内置选项,走另外两条路:

  1. 直接用 PicGo App(图形界面)
  2. 或者用 Custom Command(调用本机装好的 PicGo CLI)

方案一:PicGo App#

配置#

Typora 偏好设置 → 图像,上传服务 改成 PicGo(app),然后保证 PicGo App 已经打开在后台跑着就行。

image-20260315190114014

PicGo App 里的 Amazon S3 配置(Cloudflare R2 填 S3 兼容参数):

字段填什么
应用密钥 IDAccess Key ID
应用密钥Secret Access Key
桶名picture
上传文件路径img/{year}/{month}/{day}/{md5}.{extName}
地区auto
自定义节点https://你的账户.r2.cloudflarestorage.com
拒绝无效 TLS 证书连接yes
ACL 访问控制列表public-read
ForcePathStyleyes
自定义输出 URL 模板https://你的图片域名/{path:/^picture\//g,''}
Bucket 前缀no

我自己填的模板长这样:

https://img.picr2.online/{path:/^picture\//g,''}

坑:正则转义#

这个是最容易搞错的地方。

在 PicGo App 输入框里写

https://img.picr2.online/{path:/^picture\//g,''}

存进 config.json 之后会变成

"outputURLPattern": "https://img.picr2.online/{path:/^picture\\//g,''}"

也就是说 GUI 里写单反斜杠,JSON 里会自动变双反斜杠。如果你手动改了 config.json,或者直接把 JSON 里的写法粘到 GUI 输入框,正则就会失效,最终图片链接会多出一截桶名:

# 不对的
https://img.picr2.online/picture/img/2026/03/15/xxx.png
# 想要的
https://img.picr2.online/img/2026/03/15/xxx.png

为什么会多出 /picture/#

这个问题本身也值得说一下。开了 ForcePathStyle = yes 之后,插件内部拿到的原始路径格式是:

/{bucketName}/{objectKey}

也就是:

/picture/img/2026/03/15/xxx.png

所以输出模板如果只是简单写 {path},桶名就会直接带进去。要把它去掉,就得在模板里用正则替换:

https://img.picr2.online/{path:/^picture\//g,''}

方案二:Custom Command(更推荐)#

为什么我更喜欢这套#

主要是因为不依赖 Typora 自带的那个旧版 picgo.exe,而是直接调你本机装好的 PicGo CLI。插件版本、Node 环境、配置文件都是你自己控制的,出了问题也可以直接在终端里手动跑一遍复现。

安装#

先确认本机有 Node:

Terminal window
node -v
npm -v

然后全局装 PicGo 和 S3 插件:

Terminal window
npm install -g picgo
picgo add s3
picgo use uploader aws-s3

如果你在 GUI 里创建过一个叫 s3 的配置,也可以显式指定:

Terminal window
picgo use uploader aws-s3 s3

PicGo CLI 默认配置文件在:

C:\Users\你的用户名\.picgo\config.json

Typora 里怎么填#

image-20260315190307525

偏好设置 → 图像,上传服务自定义命令,命令填:

Terminal window
C:\nvm4w\nodejs\picgo.cmd upload

路径改成你本机 Node 的实际位置。

最小可用的 config.json#

用 Custom Command 的话,我建议把配置文件精简一下,只保留真正需要的字段:

{
"picBed": {
"current": "aws-s3",
"uploader": "aws-s3",
"transformer": "path",
"aws-s3": {
"accessKeyID": "你的AccessKeyID",
"secretAccessKey": "你的SecretAccessKey",
"bucketName": "picture",
"uploadPath": "img/{year}/{month}/{day}/{md5}.{extName}",
"region": "auto",
"endpoint": "https://你的账户.r2.cloudflarestorage.com",
"proxy": "",
"rejectUnauthorized": true,
"acl": "public-read",
"pathStyleAccess": true,
"outputURLPattern": "https://img.example.com/{path:/^picture\\//g,''}",
"urlPrefix": "",
"urlSuffix": "",
"disableBucketPrefixToURL": true
}
},
"picgoPlugins": {
"picgo-plugin-s3": true
}
}

关于 s3aws-s3 同时出现#

如果你以前在 GUI 里改来改去,配置文件里可能会看到 s3aws-s3 同时存在,看上去像重复,实际上很多是旧字段、缓存或历史残留。

picgo-plugin-s3 现在真正读的是 picBed.aws-s3,所以如果只用一套方案,其他的可以直接删掉,保持干净。


怎么选#

如果只看能不能跑,两套都行。

但如果你本机已经有 Node 和 PicGo CLI,建议直接走 Custom Command,省心很多。PicGo App 适合不想碰命令行、就要图形界面的场景,不过要注意 GUI 正则转义那个坑。


排错清单#

配好了还是不工作,可以按这个顺序查:

  1. Typora 是不是还在用自带旧版 PicGo-Core
  2. 本机 picgo 命令能不能直接在终端跑
  3. picgo-plugin-s3 有没有装
  4. endpointbucketNameaccessKeyIDsecretAccessKey 有没有填对
  5. pathStyleAccess 和你的对象存储是否匹配
  6. 自定义域名能不能直接访问对象
  7. outputURLPattern 有没有正确去掉桶名前缀
  8. GUI 输入框和 JSON 文件里的反斜杠转义有没有搞混

最后#

整个弄下来,感觉最绕的地方不是哪一步特别复杂,而是 Typora、PicGo App、PicGo CLI、S3 接口、对象存储、CDN、自定义域名这几层叠在一起,每一层看着都没问题,但一旦某个地方有点偏差,最后就是一个莫名其妙的错误链。

配好之后其实很稳,之后截图直接拖进 Typora 就能用,也不用管其他的。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Typora 自动上传图片实践:PicGo App 与 PicGo-Core 两套方案踩坑记录
https://dawn114514.site/posts/typora-picgo-r2-auto-upload/
作者
黎明
发布于
2026-03-15
许可协议
CC BY 4.0

部分信息可能已经过时

目录