前言
之前 Typora 一直用的自带上传图片 PicGo,今天换成更强大的 PicList,由于不爱使用客户端,在此仍然以 CLI/API 的形式进行调用
PicList-Core
PicList-Core 是一个功能强大的图片上传工具,提供 CLI 和 API 两种调用方式。它在 PicGo-Core 的基础上增强了功能,同时保持插件兼容性,并且原生支持 Typora 集成
https://github.com/Kuingsmile/PicList-Core
安装
由于 PicList-Core 同时支持 CLI 和 API,故在此提供两种不同的调用方案:
调用本机服务
调用远程服务
调用本机服务
本机服务,即 Typora 软件所在机器,让 Typora 调用自身机器的 PicList-Core
安装服务
此处环境以 Windows 11 为例,使用npm命令进行安装
注:PicList 需要 Node.js >= 22
npm install piclist -g添加配置
根据提示,创建配置文件,此处以阿里云 OSS 为例,填写相关信息

调用服务
在 Typora 的设置中,选择自定义命令,添加picgo upload

调用远程服务
远程服务,即服务不在 Typora 本机上,让 Typora 调用远程的 PicList-Core API实现上传图片,譬如局域网/外网环境
安装服务
此处环境以 Rocky Linux 9 为例,使用 Docker 进行安装
docker-compose.yml 配置如下:
services:
piclist:
image: kuingsmile/piclist:latest
container_name: piclist
restart: always
ports:
- "36677:36677"
volumes:
- ./piclist:/root/.piclist
command: >
node /usr/local/bin/picgo-server -k <你的密钥>注:当将接口暴露于公网时,为了防止恶意上传,可以使用接口鉴权功能。通过在运行
picgo-server时添加-k或--key参数来设置一个密钥
启动服务
docker compose up -d访问 API:http://IP:36677
添加配置
使用 Docker 启动的服务,创建配置文件需要进去到容器内部:
docker exec -it piclist sh
picgo set uploader根据提示,创建配置文件,此处以阿里云 OSS 为例,填写相关信息

调用服务
调用 API 有多种方式,此处以 Python 调用为例,示例代码upload.py如下:
import os
import sys
import mimetypes
import requests
# PicList Server 地址
UPLOAD_URL = (
"http://master:36677/upload"
"?key=<你的密钥>"
"&picbed=<你的图床名>"
"&configName=<你的配置文件名>"
)
session = requests.Session()
def upload(image_path: str) -> str:
"""
上传单张图片
返回图片URL
"""
if not os.path.isfile(image_path):
raise FileNotFoundError(image_path)
filename = os.path.basename(image_path)
mime_type = (
mimetypes.guess_type(filename)[0]
or "application/octet-stream"
)
with open(image_path, "rb") as file:
files = {
"image": (
filename,
file,
mime_type
)
}
response = session.post(
UPLOAD_URL,
files=files,
timeout=300
)
response.raise_for_status()
data = response.json()
if not data.get("success"):
raise Exception(data)
return data["result"][0]
def main():
images = sys.argv[1:]
if not images:
sys.exit(1)
results = []
for image in images:
try:
url = upload(image)
results.append(url)
except Exception as e:
results.append("")
print("\n".join(results))
if __name__ == "__main__":
main()然后在 Typora 的设置中,选择自定义命令,添加python upload.py 即可
