使用 obsidian 已经很长时间了,和 COS 作为图床搭配起来用得很舒服。但有个问题困扰了很久:在日常使用过程中,如果设置了图片粘贴自动上传图床之后,一旦弃用了某张图片,虽然在 obsidian 中被删除了,但它仍然存在 COS 的存储桶中,时间一长就会导致大量的垃圾图片占用。思考了很久,一直希望能有一个插件能够自动将图片上传到 COS,如果需要弃用图片,也能自动删除存储桶中的文件,但一直没有看到合适的插件。一直在使用的 obsidian-image-auto-upload-plugin
虽然很好用,但和 PicGo 强绑定了,我在跨设备使用时,通常都是在服务端部署的 PicList-Core,删除功能似乎也无法正常使用。
今天突发奇想,没有合适的插件,为什么不能自己开发一个呢?于是花了一下午,obsidian-cos-picbed
应运而生。
功能概览
我对这个插件的需求很简单:
- 在粘贴图片到笔记中时,能自动将图片上传到 COS 存储桶,并替换图片链接到笔记中;
- 在删除笔记中的图片时,能同步删除 COS 存储桶中对应的图片文件;
功能其实不复杂,obsidian 和腾讯云 COS 都提供了 SDK,稍微看一下文档就可以开始 coding 了。主要设置了两个事件监听器:
- 粘贴事件:触发时解析当前剪贴板中的图片文件,调用 COS 的 SDK 接口上传并获取链接,写入笔记中;
- 右键事件:触发时解析当前选中的图片文件名称,调用 COS 的 SDK 接口执行删除操作,并删除笔记中的图片链接;
使用说明
首先当然是 COS 的开通和设置了,参考官方教程或网上文章即可,这里不再赘述。然后到腾讯云控制台中获取 SecretId 和 SecretKey,并记下存储桶的相关信息:
SecretId
SecretKey
Bucket
(存储桶名称)Region
(存储桶区域)
然后从 Github 仓库的 release 处下载插件,解压之后放到 .obsidian/plugins
目录下,重启 obsidian 再启用 COS Picbed
插件即可。插件配置如下:
其中的 Prefix
指的是存储桶中的目录名称,图片将存储在这个目录下。
由于直接在插件中调用了 COS 的 SDK,所以会存在跨域问题,解决方案是在存储桶的安全设置中添加 CORS 规则:
app://obsidian.md
配置完成之后,直接粘贴图片即可自动上传,需要删除时,只需要右键点击图片,选择 “Delete this image” 即可:
项目已开源至:obsidian-cos-picbed