使用 obsidian 已经很长时间了,和 COS 作为图床搭配起来用得很舒服。但有个问题困扰了很久:在日常使用过程中,如果设置了图片粘贴自动上传图床之后,一旦弃用了某张图片,虽然在 obsidian 中被删除了,但它仍然存在 COS 的存储桶中,时间一长就会导致大量的垃圾图片占用。思考了很久,一直希望能有一个插件能够自动将图片上传到 COS,如果需要弃用图片,也能自动删除存储桶中的文件,但一直没有看到合适的插件。一直在使用的 obsidian-image-auto-upload-plugin 虽然很好用,但和 PicGo 强绑定了,我在跨设备使用时,通常都是在服务端部署的 PicList-Core,删除功能似乎也无法正常使用。

今天突发奇想,没有合适的插件,为什么不能自己开发一个呢?于是花了一下午,obsidian-cos-picbed 应运而生。

功能概览

我对这个插件的需求很简单:

  1. 在粘贴图片到笔记中时,能自动将图片上传到 COS 存储桶,并替换图片链接到笔记中;
  2. 在删除笔记中的图片时,能同步删除 COS 存储桶中对应的图片文件;

功能其实不复杂,obsidian 和腾讯云 COS 都提供了 SDK,稍微看一下文档就可以开始 coding 了。主要设置了两个事件监听器:

  1. 粘贴事件:触发时解析当前剪贴板中的图片文件,调用 COS 的 SDK 接口上传并获取链接,写入笔记中;
  2. 右键事件:触发时解析当前选中的图片文件名称,调用 COS 的 SDK 接口执行删除操作,并删除笔记中的图片链接;

使用说明

首先当然是 COS 的开通和设置了,参考官方教程或网上文章即可,这里不再赘述。然后到腾讯云控制台中获取 SecretId 和 SecretKey,并记下存储桶的相关信息:

  1. SecretId
  2. SecretKey
  3. Bucket(存储桶名称)
  4. Region(存储桶区域)

然后从 Github 仓库的 release 处下载插件,解压之后放到 .obsidian/plugins 目录下,重启 obsidian 再启用 COS Picbed 插件即可。插件配置如下:

image.png

其中的 Prefix 指的是存储桶中的目录名称,图片将存储在这个目录下。

由于直接在插件中调用了 COS 的 SDK,所以会存在跨域问题,解决方案是在存储桶的安全设置中添加 CORS 规则:

app://obsidian.md

image.png

配置完成之后,直接粘贴图片即可自动上传,需要删除时,只需要右键点击图片,选择 “Delete this image” 即可:

image.png

项目已开源至:obsidian-cos-picbed