Typora 集成 PicList-Core
-- --
Loading...

前言

之前 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 为例,填写相关信息

image-20260727064615715

调用服务

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

image-20260727064745071

调用远程服务

远程服务,即服务不在 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 为例,填写相关信息

img

调用服务

调用 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 即可

image-20260727091411621


END
Typora 集成 PicList-Core
/?p=019fa09e-3a58-774b-b74e-11b87b77e548
作者
张子
发布于
更新于
许可