写博客、维护文档站点、给开源项目做截图——这些场景都离不开图床。PicGo 是这个领域最流行的桌面客户端,但它的云存储管理一直偏弱:上传之后想批量改名?想跨设备同步配置?想从云端直接删除一张图?都得手动绕弯。PicList 基于 PicGo 深度二次开发,把这些"绕弯"的事做成了正经功能,v3.4.0 又补上了几块短板。
云存储不再只是"上传完就不管了"
PicGo 的核心流程是"选图床 → 上传 → 拿链接",上传后的管理基本靠你自己去 S3 控制台或七牛后台操作。PicList 直接在客户端里补齐了这一块:
- 目录浏览与搜索:在界面里展开云端目录树,按文件名关键词搜索,不用再登录 Web 控制台翻页。
- 批量操作:多选文件后批量删除、批量移动目录。
- 正则批量重命名:用正则表达式匹配文件名并替换,一次把几十张
screenshot_2024-01-xx.png改成feature-xx.png。
正则重命名这一项尤其实用。假设你在 S3 桶里有一批旧截图,文件名全是 img_20230101_xxxx.png,想统一改成 blog-xxxx.png,在 PicList 里填入匹配规则即可:
匹配正则:img_\d{8}_(.*)
替换模板:blog-$1
匹配 img_20230101_abcd.png → 输出 blog-abcd.png。界面操作,不需要写脚本。
多设备同步:WebDAV 与 Git 两条路
图床工具的配置(图床账号、快捷键、插件列表)往往只存在本地。换一台电脑就要重新配一遍,插件还得逐个装。PicList v3.4.0 提供了两种同步方案:
- WebDAV 同步:把配置文件推到你自己的 WebDAV 服务器(坚果云、NextCloud、自建 Nginx + WebDAV 都行),另一台设备拉下来直接用。
- Git 同步:把配置推到一个私有仓库,版本历史天然可追溯,适合有 Git 习惯的开发者。
Git 同步的配置方式很直接。在 PicList 设置里填入仓库地址和分支,工具自动把配置目录当作仓库内容推送。如果你想用自建 Git 服务,一个最小化的 Gitea 实例就够了:
# docker-compose.yml — 最小 Gitea 实例,用于 PicList 配置同步
version: "3"
services:
gitea:
image: gitea/gitea:1.21
container_name: gitea-piclist
environment:
- GITEA__server__ROOT_URL=http://localhost:3000
- GITEA__server__SSH_PORT=2222
ports:
- "3000:3000"
- "2222:2222"
volumes:
- gitea-data:/data
restart: unless-stopped
volumes:
gitea-data:
# 启动后创建私有仓库 piclist-config
# 在 PicList 同步设置中填入:
# 仓库地址:http://localhost:3000/youruser/piclist-config.git
# 分支:main
# 认证:用户名 + Token(在 Gitea 设置 → 应用 → 生成 Token)
docker compose up -d
WebDAV 方案更轻量。如果你用坚果云,直接在坚果云里开启第三方 WebDAV 接入,拿到地址和密码填进 PicList 即可。自建的话,Nginx 加一个 WebDAV 模块也只需要几行配置:
# /etc/nginx/conf.d/webdav.conf — 最小 WebDAV 站点
server {
listen 8080;
server_name webdav.local;
location / {
root /data/webdav;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;
create_full_put_path on;
auth_basic "WebDAV";
auth_basic_user_file /etc/nginx/webdav.passwd;
}
}
# 创建密码文件并启动
htpasswd -c /etc/nginx/webdav.passwd piclistuser
nginx -s reload
两条路各有取舍:Git 有版本历史但依赖仓库可用性;WebDAV 更简单但没有 diff 回溯。按自己的基础设施选就行。
相册云删除同步:删一条记录,也删云端文件
PicGo 的相册(上传历史列表)和云端是割裂的——你在相册里删一条记录,云端文件还在,存储费用继续计。PicList 的"云删除同步"把这两步合并:相册里删除时,同时向云端发删除请求。
这对按存储量计费的 S3、七牛、又拍云用户很实际。一张图不用了,删一次就彻底清理,不用再跑去控制台手动找文件。
CLI 与自动化:piclist-server 的 HTTP 接口
PicList 继承了 PicGo 的 CLI 思路,并额外提供了 piclist-server 模式——启动一个本地 HTTP 服务,接收上传请求。这意味着你可以在脚本、CI 流程、编辑器插件里直接 POST 图片,拿到返回的 URL。
# 启动 piclist-server(端口 36677 为默认值)
piclist-server
# 用 curl 上传一张图片
curl -X POST http://localhost:36677/upload \
-F "file=@/path/to/screenshot.png" \
-F "configName=aws-s3"
# 返回示例
# {"url": "https://your-bucket.s3.amazonaws.com/blog/screenshot.png"}
在 CI 场景里,这比手动上传高效得多。比如 GitHub Actions 里自动发布文档时截图上传:
# .github/workflows/docs.yml 片段
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Start PicList Server
run: |
# 前置条件:已在 runner 上安装 piclist 并配置好图床
piclist-server &
- name: Upload Screenshots
run: |
for img in assets/*.png; do
URL=$(curl -s -X POST http://localhost:36677/upload \
-F "file=@$img" \
-F "configName=aws-s3" | jq -r '.url')
echo "Uploaded $img → $URL"
done
注意:CI 环境里需要提前把 PicList 的配置文件(含图床密钥)安全地注入 runner,可以用 GitHub Secrets + 环境变量方案,不要把密钥硬编码进仓库。
选用建议与边界
PicList 是 PicGo 的二次开发版本,插件生态与 PicGo 共享,迁移成本低——PicGo 的配置文件可以直接导入。但有几个点需要留意:
- 兼容性边界:部分 PicGo 插件如果依赖 PicGo 特定内部 API 版本,在 PicList 上可能需要适配。遇到插件报错时先查 PicList 的兼容列表。
- 同步冲突:WebDAV/Git 同步是"最后写入胜出"策略,两台设备同时改配置可能丢一方的修改。养成"改完立刻同步"的习惯可以规避。
- 云删除不可逆:相册云删除同步一旦开启,删除操作会直接清掉云端文件,没有回收站缓冲。对 S3 等支持版本控制的桶,建议先在桶设置里开启版本控制作为兜底。
快速上手清单:
- 从 PicList GitHub Release 下载 v3.4.0 安装包,安装后导入已有 PicGo 配置。
- 在图床配置里选一个你常用的存储(S3 / 七牛 / 又拍云 / 腾讯云 COS),填好密钥。
- 上传几张测试图片,然后尝试目录浏览和正则重命名。
- 选 WebDAV 或 Git,配好同步路径,在第二台设备上验证配置拉取。
- 如需 CI 集成,启动
piclist-server,用 curl 验证上传链路。
如果你现在用 PicGo 且对"上传完就找不到文件"这件事已经烦了很久,PicList 值得试一下——迁移成本几乎为零,多出来的功能刚好补在最痛的地方。