Obsidian插件系列-ImageManager图床上传管理指南

Obsidian插件系列-ImageManager图床上传管理指南

2026年9月19日·#技术分享Obsidian/ImageManager/CloudFlare-ImgBed/图床/插件/教程·2995 字 15 分钟
浏览量加载中...
AI 摘要- DeepSeek

自制 Obsidian 插件 Image Manager 的完整使用文档——笔记图片一键直传 CloudFlare-ImgBed 图床、整个文件夹批量上传、文章封面图自动转 WebP 压缩上传、链接自动替换、本地图片安全清理。插件每次更新,这篇文档同步更新。

封面图
Obsidian插件系列-ImageManager图床上传管理指南 - 封面图

前言#

Image Manager 是我自己写的 Obsidian 插件,专门打通”写笔记 → 图片上库 → 发布博客”这条链路。

它之前走的是 PicList 中转方案(Obsidian → 本地 PicList → 图床),但坑不少:批量传完一个笔记后切到下一个文件再执行命令,经常点了没反应;中间还多依赖一个常驻软件。后来我把插件重写成直连 CloudFlare-ImgBed 图床的 API,PicList 彻底退役。

这篇是我的查阅文档:功能、设置、操作、安全机制、排错都在这。插件每次有新功能或功能修改,我都会同步更新这篇。

功能一览#

功能入口说明
上传当前笔记的图片命令面板:上传图片到图床单篇笔记,图片直传图床,链接自动替换
批量上传文件夹命令面板:批量上传文件夹图片到图床,或文件树右键文件夹递归处理文件夹(含子文件夹)下所有笔记
上传文章封面图命令面板:上传文章封面图到图床,或文件树右键文件夹封面转 WebP 压缩后上传独立目录,改写 frontmatter image 字段
下载网络图片到本地命令面板:下载网络图片到本地反向操作:网图下载到笔记同目录 assets/
上传后自动删除本地图设置开关(默认开启)只删本次成功上传的,移入系统回收站

一、设置项说明#

设置位置:Obsidian 设置 → 第三方插件 → Image Manager。

图床上传设置(CloudFlare-ImgBed 直连)#

设置项我的配置说明
图床地址https://img.tsh520.cn图床站点地址,末尾带不带 / 都行(插件会自动处理)
管理员账号(图床后台的用户名)用于调用图床登录接口换取会话
管理员密码(图床后台的密码)同上
上传目录blog/article图片在图床内存放的相对路径,和博客文章现有图片的目录保持一致
文件命名方式保留原文件名传上去还是 p001_1.webp 这种原名;重名时图床自动加 (1) 后缀
上传渠道留空留空使用图床后台配置的默认存储渠道;也可指定 telegram / cfr2 / s3 等
上传成功后删除本地图片开启详见第四节,有一整套防误删机制

封面图上传设置(仅桌面端)#

设置项我的配置说明
封面图图床目录blog/post-covers封面上传到图床的独立目录,与文章资源图(blog/article)分开存放
封面图本地目录(相对库根)../public/assets/images/posts封面图本地文件所在目录(库根是 src/,向上到博客根再进 public)
封面图压缩模式无损无损:体积约压到 70%;高质量有损 q90:体积约压到 15%
封面上传成功后删除本地文件开启同文章资源图的安全机制,移入系统回收站

下载设置#

设置项默认值说明
下载目录名assets网络图片下载到笔记同目录下的这个文件夹
下载超时时间(秒)30单张图片下载的最大等待时间

通用设置#

设置项默认值说明
上传间隔(毫秒)200连续上传两张图之间的间隔,避免图床限流
日志级别仅错误排查问题时可改成”详细”,日志输出到控制台(Ctrl + Shift + I)

二、上传当前笔记的图片#

  1. 打开一篇含本地图片(![](assets/xxx.webp) 或 ![[xxx.webp]])的笔记
  2. Ctrl + P → 执行 Image Manager: 上传图片到图床
  3. 右上角出现”⬆️ 开始上传…”进度条,逐张直传
  4. 完成后弹窗汇总:✅ 成功 N 张 / 🗑️ 已删除本地图片 N 张

笔记里的链接会被自动替换成图床真实地址,例如:

上传前:![](assets/p001_1.webp)
上传后:![](https://img.tsh520.cn/file/blog/article/p001_1.webp)

三、批量上传整个文件夹#

一篇一篇传太慢,批量功能一次处理一个文件夹:

  • 方式 A:Ctrl + P → 批量上传文件夹图片到图床 → 在弹出的搜索框里输入文件夹名(如 MySQL-运维篇)回车
  • 方式 B:左侧文件树右键任意文件夹 → “上传此文件夹的图片到图床”

批量行为:

  • 递归处理该文件夹(含子文件夹)下所有 Markdown 笔记
  • 全程共用一次登录(会话过期自动重登),右上角显示总进度:⬆️ 批量上传 (3/7)
  • 没有本地图片的笔记自动跳过,不弹窗打扰
  • 每篇完成自动替换链接 + 按设置删除本地图片
  • 结束后统一汇总:✅ 上传 X 张(Y 篇笔记)/ 🗑️ 已删除 Z 张 / ❗ N 条错误
  • 失败详情(哪篇哪张)在控制台(Ctrl + Shift + I → Console)里看,搜 [Image Manager]

四、上传成功后自动删除本地图片(安全机制)#

上传完成后,插件可以把对应的本地图片删掉(省得手动清 assets)。因为删除是危险操作,做了多道保险,宁可漏删、绝不误删:

  1. 白名单登记:删除名单只在单张图片上传成功时登记(按文件对象记录,不按名字搜索)——上传失败、跳过、路径解析不到的图永远不会进名单
  2. 先替换后删除:笔记里的链接必须已成功替换写回,才进入删除阶段
  3. 文件校验:删除前确认文件还在库中、且就是当初上传的那个文件
  4. 类型校验:只删图片扩展名,其他文件碰不到
  5. 引用校验:重读替换后的笔记,若发现还有引用指向该文件(替换没生效),跳过不删
  6. 跨笔记校验:如果其他笔记也引用了这张图,跳过不删(防止弄裂别的笔记)
  7. 回收站兜底:删除走系统回收站(vault.trash),不是永久删除,随时可恢复

被跳过的图片会在汇总里提示 ⚠️ X 张未删除,具体原因在控制台搜 跳过删除。

跨笔记共享的图怎么办?#

同一张图被多篇笔记引用时(比如共用一个 assets 文件夹),把引用它的笔记全部上传一遍即可:最后一张图会在”最后一篇引用它的笔记”上传成功后被自动删掉。中途被跳过不用管,那是保护机制在工作。

五、重名图片怎么处理#

  • 图床端:上传同名文件时自动重命名为 p094_2(1).webp、(2) 递增,不覆盖旧图、不报错
  • 插件端:笔记里写进的是图床返回的真实地址(带 (1) 也一样),保证链接永远有效
  • 本地文件:不会被重命名、不会被移动,保持原名原位置(反正上传成功后会被自动删掉)

六、下载网络图片到本地#

反向操作,用于把别人文章里的图存到自己库里:

  1. 打开含网络图片(![](https://...))的笔记
  2. Ctrl + P → 下载网络图片到本地
  3. 图片下载到笔记同目录的 assets/ 文件夹,链接替换为本地相对路径
  4. 同名文件会被覆盖

七、上传文章封面图到图床(仅桌面端)#

批量把文章封面(frontmatter image 字段指向的本地图片)转 WebP 压缩后上传图床,并自动把 image 字段改写为图床 URL。

用法:Ctrl + P → 上传文章封面图到图床 → 选文件夹;或在文件树右键文件夹 → “上传此文件夹的文章封面到图床”。

处理流程(逐篇):

  1. 读取 frontmatter 的 image 字段,筛选出本地路径(/ 开头;已是图床 URL 的自动跳过)
  2. 定位本地文件(默认 public/assets/images/posts/,目录可在设置里改)
  3. 转成 WebP 并压缩(默认无损;设置里可切高质量有损 q90)
  4. 上传到图床独立目录 blog/post-covers(与文章资源图 blog/article 分开,方便随机图、清理等场景区分)
  5. 改写 frontmatter 的 image 字段为图床 URL(只动 frontmatter 区间,不重排 YAML、不碰正文示例)
  6. 成功后删除本地封面文件(移入系统回收站;可在设置里关闭)

压缩效果参考(实测 1536×1024 的 AI 生成封面 PNG):

模式单张体积压缩率
无损2.5MB → 1.8MB约 70%
高质量有损 q902.5MB → 0.35MB约 14%

删除的安全机制(与文章资源图同一套哲学):

  • 仅当”转码 + 上传 + frontmatter 写入”全部成功才删除,任一步失败都会保留本地文件
  • 改写后会重新读取文件确认 image 字段已更新为图床 URL,校验不过就不删
  • 批量开始时会扫描全库引用,若其他文章仍引用该封面则跳过删除
  • 删除走系统回收站(shell.trashItem),失败则跳过并提示,绝不永久删除

八、常见问题排查#

现象原因与处理
弹 ❌ 图床登录失败 HTTP 401图床地址/账号/密码和后台不一致,回设置里核对
弹 ❌ 请先打开一个 Markdown 笔记当前活动标签页不是笔记,先打开一篇 md
上传成功但某张图”未删除”安全机制生效(多半是其他笔记还在用它),把那篇也传了就好
图片点击放大预览不显示已修复(早期上传的图 Content-Type 是 octet-stream,新上传的都正常)
封面图”跳过 N 篇”该篇 image 为空、已是图床 URL、或不是 / 开头的公共路径(后两者会在控制台记原因)
封面图”本地文件不存在”image 指向的文件不在设置的封面图本地目录里,检查设置或文件是否被移动
怎么看详细日志Ctrl + Shift + I 打开控制台 → Console → 过滤框输入 Image Manager

九、给未来的自己:源码与更新#

  • 源码工程:plug-in/Obsidian/obsidian-image-manager/(main.ts + esbuild)
  • 构建:在该目录跑 pnpm build(自动类型检查 + 打包 + 拷贝进 src/.obsidian/plugins/obsidian-image-manager/)
  • 生效:构建后在 Obsidian 里把插件关闭再开启(或 Ctrl+P 重载)
  • 改了插件必须同步更新本文,在文末版本历史里加一行

版本历史#

  • 2026-09-24 · v2.3.2:修复封面图上传后”本地文件未删除”——Electron 14+ 渲染进程拿不到 shell 模块,改为回退到平台命令移入回收站(Windows 用 PowerShell 系统 API / macOS 用 Finder / Linux 用 gio trash)
  • 2026-09-24 · v2.3.1:修复封面图上传必现的 Failed to construct 'URL': Invalid URL 报错——WebP 编码器的 WASM glue 在 CJS 打包后 import.meta.url 失效,改为注入 CJS 等价的文件 URL
  • 2026-09-23 · v2.3.0:新增”上传文章封面图到图床”——批量把文章 frontmatter image 指向的本地封面转 WebP 压缩(默认无损,可切有损 q90)后上传到独立目录 blog/post-covers,自动改写 image 字段;成功后可选删除本地封面(多重校验 + 系统回收站)
  • 2026-09-19 · v2.2.0:新增批量上传——命令面板选择文件夹或文件树右键,递归处理整个文件夹的所有笔记;单篇上传重构为支持批量安静模式(共享进度条、统一汇总)
  • 2026-09-19 · v2.1.0:新增”上传成功后删除本地图片”(默认开启),七道保险防误删,移入系统回收站;上传文件按扩展名写入正确 MIME 类型(修复 image-toolkit 预览问题)
  • 2026-09-19 · v2.0.0:抛弃 PicList 中转,直连 CloudFlare-ImgBed API(管理员账号密码登录 + /upload 上传);命令从 checkCallback 改为 callback,根治”切换文件后执行命令无反应”;设置页全新(图床地址/账号/密码/目录/命名方式/渠道)
  • v1.x(已弃用):PicList 中转版,依赖本地 PicList 常驻,已彻底移除

评论区

[ 标签 ]
# AI37# AI 编程2# AI工具1# AI绘图1# AI辅助开发2# Ajax7# Apifox1# AstrBot3# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# Cloudflare2# CloudFlare2# CloudFlare-ImgBed3# coc4# CSS10# DeepSeek6# deepseek2# DELETE1# Docker5# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML9# HTTP10# ImageManager1# Java23# java13# JavaScript11# JavaWeb113# JDBC7# JSON2# JUnit1# LangChain25# Linux4# Logback1# Maven17# Muse Spark1# Mybatis1# MyBatis18# MySQL45# MySql1# NapCat1# Node.js1# obsidian2# Obsidian5# OpenCode4# ORM1# PathVariable1# PicGo1# PyCharm1# Python70# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot37# SpringMVC5# SQL2# Streamlit5# Svelte2# TailwindCSS1# Telegram3# Tlias2# Vercel1# vscode2# Vue20# Waline3# Web3# WebDAV1# Web基础6# Web开发6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档10# 写作1# 函数2# 刷步数1# 前端52# 动态1# 动漫1# 包1# 单词2# 博客8# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 后端48# 图床6# 地图1# 备份2# 大模型1# 奇思妙想1# 存储1# 学习方法6# 学校1# 宝塔面板3# 宝宝10# 实战4# 对象1# 导航栏1# 工具2# 布局2# 开发1# 开发工具1# 开发规范1# 开心1# 异常处理1# 影视2# 微信1# 性能优化2# 总结1# 想法15# 感受1# 感悟11# 指南1# 提示词工程2# 插件5# 故障排除1# 效率工具2# 教程10# 数据分析9# 数据库27# 数据结构1# 文件操作2# 斩神1# 日常95# 日志框架1# 朋友圈1# 朱元璋1# 模块1# 模板1# 正则表达式2# 测试3# 游戏2# 爬虫7# 生活迁移1# 电影2# 电脑1# 碎碎念1# 视觉识别1# 类1# 类型注解1# 网络基础2# 网络教室1# 羊毛2# 脚本2# 脚本工具1# 自动化2# 蓝奏云1# 表单1# 订阅推荐2# 记录2# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载2# 运动1# 部署11# 部落冲突1# 配置1# 随机图1# 面向对象5# 音乐3# 音标1# 项目实战11# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]