适用:Typora / VS Code / PicList 等编辑器,通过 PicGo-Core 自动上传图片到自建 Lsky Pro
前提:Lsky Pro 已部署完成并可访问(如 <code>https://xxx.yidacp.com:xxxx</code>)
一、确认 Lsky 版本(决定 Token 获取方式)
| 版本 | 判断方法 | Token 获取 |
|---|---|---|
| V2(halcyonazure 镜像拉取的开源版最新代码 = V2.1) | 后台有「接口」菜单,提到 Bearer Token / <code>/api/v1/tokens</code> | 需 POST 接口换取 |
| V1 | 无上述菜单 | 个人设置页直接复制 |
|  |
开源版 V2.1 后已停止维护,但 API 完全可用。V1/V2 插件与配置不通用,别混用。
二、获取 V2 Token(关键)
① 开启 API:Lsky 后台 → 「接口」菜单能看到说明即已开启;
没有则去「系统设置 → 其他配置」打开接口开关。
② 换取 Token(POST,不是 GET;用 GET 打开会失败,正常):
方法 1:JSON 文件法(cmd / PowerShell 通用,推荐,100% 避开引号坑)
新建 <code>token.json</code>,内容一行:
{"email":"你的邮箱","password":"你的密码"}
执行:
curl.exe -X POST "https://你的域名:端口/api/v1/tokens" -H "Accept: application/json" -H "Content-Type: application/json" -d @D:\路径\token.json
方法 2:PowerShell 原生(无引号烦恼,自动解析)
$body = @{ email = '你的邮箱'; password = '你的密码' } | ConvertTo-Json
$res = Invoke-RestMethod -Uri "https://你的域名:端口/api/v1/tokens" `
-Method Post -Headers @{ 'Accept' = 'application/json' } `
-ContentType 'application/json' -Body $body
$res.data.token
方法 3:cmd 反斜杠转义
curl.exe -X POST "https://你的域名:端口/api/v1/tokens" -H "Accept: application/json" -H "Content-Type: application/json" -d "{\"email\":\"你的邮箱\",\"password\":\"你的密码\"}"
成功返回:
{"status":true,"message":"success","data":{"token":"1|aBcDeFgHiJkLmNoPqRsTuVwXyZ..."}}
<code>1|aBcDeFg…</code>(格式 <code>数字|一串字符</code>)即 Token。

⚠️ Windows 两个大坑
- PowerShell 里 <code>curl</code> 是 <code>Invoke-WebRequest</code> 的别名,<code>-H</code> 会被当 <code>-Headers</code>(要求哈希表)→ 报「无法将 String 转换为 IDictionary」。改用 <code>curl.exe</code> 或 方法 2。
- cmd 不认识单引号,<code>-d '{"…":…}'</code> 会把单引号一并发出去 → JSON 非法 → 返回 <code>email 不能为空</code>。改用双引号+转义,或直接用 JSON 文件法。
- 自签证书加 <code>-k</code>(curl.exe)或忽略证书错误(插件里开 <code>ignoreCertErr</code>)。
三、安装 PicGo-Core(两条路线)
路线 A:全局 npm 安装(推荐,命令行可自由测试)
npm install picgo -g
picgo -v # 出版本号即成功
国内慢先切源:<code>npm config set registry https://registry.npmmirror.com</code>
路线 B:Typora 内置下载(省事,免 Node)
Typora → 文件 → 偏好设置 → 图像 → 上传服务选 PicGo-Core (command line) →「下载或更新」。
⚠️ 路线 B 装插件必须 cd 到 Typora 的 picgo 目录再执行 install,否则插件装到全局,Typora 找不到。
- Windows:<code>C:\Users\用户名\AppData\Roaming\Typora\picgo\win64</code>
- macOS:<code>~/Library/Application Support/abnerworks.Typora/picgo/mac/</code>
四、安装 Lsky 上传插件
picgo install lsky-uploader # 推荐:自动处理 Bearer,兼容 V2 最新 API
# 或
picgo install lankong # 备选:需手动加 Bearer 前缀
看到 <code>install success</code> 即成功。
五、配置图床
方式 1:交互式(推荐,自动生成配置,不用记字段名)
picgo set uploader # 方向键选中 lsky-uploader / lankong,按提示填
picgo use uploader # 再选一次,设为默认图床

| 提示项 | 填什么 |
|---|---|
| 服务器域名 / server | <code>https://你的域名:端口</code>(不带 /api/v1,不以 / 结尾) |
| Token | 见下表(Bearer 规则不同!) |
| 策略ID / strategyId | 留空(用默认存储策略) |
| 相册ID / albumId | 留空 |
| permission | public / 公开(否则外链打不开) |
| ignoreCertErr | 关闭;自签/证书过期报 <code>certificate has expired</code> 再打开 |
Token 前缀规则(极易错):
| 插件 | 怎么填 | |
|---|---|---|
| <code>lsky-uploader</code> | <code>1 | aBcDeFg…</code>(不加 Bearer) | |
| <code>lankong</code> | <code>Bearer 1 | aBcDeFg…</code>(Bearer + 空格) |
方式 2:手写 <code>~/.picgo/config.json</code>
路径:Windows <code>C:\Users\用户名\.picgo\config.json</code>;Linux/macOS <code>~/.picgo/config.json</code>
以 <code>lankong</code> 为例:
{
"picBed": {
"current": "lankong",
"uploader": "lankong",
"transformer": "path",
"lankong": {
"lskyProVersion": "V2",
"server": "https://你的域名:端口",
"token": "Bearer 1|这里换成你的token",
"strategyId": "",
"albumId": "",
"permission": "public",
"ignoreCertErr": false,
"syncDelete": false
}
},
"picgoPlugins": {
"picgo-plugin-lankong": true
}
}
自签证书把 <code>ignoreCertErr</code> 改为 <code>true</code>。
六、测试上传
picgo upload D:\路径\test.png
返回 <code>https://你的域名:端口/i/2026/…png</code> 即成功。
七、接入 Typora(自动上传)
Typora → 文件 → 偏好设置 → 图像:
- 「插入图片时…」选 上传图片
- 「上传服务」选 PicGo-Core (command line)
- 「PicGo 路径」:
- 路线 A(全局 npm):Windows 填 <code>C:\Users\用户名\AppData\Roaming\npm\picgo.cmd</code>(是 .cmd 不是 .exe);Mac/Linux 用 <code>which picgo</code> 查
- 路线 B(Typora 内置):留空,Typora 自动识别
- 点「验证图片上传选项」测试,返回图片 URL 即成功
之后粘贴/拖入图片,Typora 自动上传并替换为图床外链。

八、必做检查
Lsky 后台 → 存储策略 → 默认本地策略 → 编辑 → 访问地址 = <code>https://你的域名:端口</code>。
PicGo 返回的图片链接前缀来源于此,填错会「上传成功但图片裂图」。

九、排错速查表
| 报错 | 原因 / 解决 |
|---|---|
| <code>email 不能为空</code> | body 不是合法 JSON(cmd 单引号被当数据)→ 用 JSON 文件法 |
| <code>无法绑定参数"Headers"</code> | PowerShell 里 <code>curl</code> 是 <code>Invoke-WebRequest</code> 别名 → 用 <code>curl.exe</code> 或 <code>Invoke-RestMethod</code> |
| <code>资源解析服务请求失败</code> | 用 GET 访问 <code>/api/v1/tokens</code> → 该接口只接受 POST |
| <code>Connection refused</code> / 超时 | server 填错(带 /api/v1 或带 / 结尾)或 Lsky 容器没起来 |
| <code>401 Unauthorized</code> | Token 无效:<code>lsky-uploader</code> 别加 Bearer;<code>lankong</code> 必须加 <code>Bearer </code>(有空格) |
| <code>Too Many Attempts</code> | 密码错太多次被限流,等几分钟;确认是 Lsky 管理员账号,不是群晖 DSM 账号 |
| 上传成功但图片 404/裂图 | 存储策略「访问地址」未改成实际地址 |
| <code>certificate has expired</code> | <code>ignoreCertErr</code> 设 <code>true</code> / 开「忽略证书错误」 |
| Typora 找不到 picgo | 路线 A 填完整 <code>picgo.cmd</code> 路径;路线 B 要在 Typora 的 picgo 目录里装插件 |
| 外链要登录/不公开 | permission 设为 <code>public</code> |
十、核心四句话
- V2 的 Token 要 POST <code>/api/v1/tokens</code> 换,格式 <code>数字|字符</code>
- <code>lsky-uploader</code> 不加 Bearer,<code>lankong</code> 必须加 <code>Bearer </code>(带空格)
- server 填根地址,不带 <code>/api/v1</code>、不以 <code>/</code> 结尾
- 装完改存储策略访问地址,否则图片裂图