本文記錄開發 obsidian-sync-to-xlog
插件過程的踩坑和思考。
背景#
上文我們提到我們先把 obsidian 的內容同步到 xlog 上,很快我們就能讀取 obsidian 的筆記內容到 xlog 上,有一個待處理的問題是圖片資源還是原始鏈接,不是 xlog 上的 ipfs 鏈接。
所以我們需要解決它,有一定的技術難度。
技術設計#
要完成 obsidian 圖片內容上傳到 ipfs 需要以下幾個步驟:
- 讀取 md 內容,找出圖片資源,注意可能有 ob 本地圖片、遠程 CDN 圖片
- 上傳圖片到 ipfs 然後替換文本後,上傳到 xlog
別小看這兩個步驟,我花費不少心血去處理,尤其是我第一次開發 obsidian 插件,吐血滿滿。
處理圖片#
和普通的 markdown 不同, obsidian 對展示圖片資源有兩種方式:
- 原生的
![]()
圖片方案 - 內置的
![[]]
展示方案
對於第一種比較簡單,編寫正則,提取 https?
正則就可以。
需要注意的是,使用傳統的 fetch/axios 會觸發 cros 安全驗證,使用 obsidian.requestUrl
可以無視安全策略,這都是坑。
難的是第二種,我們先使用正則匹配到路徑,找到合適的 obsidian api 讀取文章真實路徑或者二進制數據即可。
這一步驟最麻煩,先略過,專門說。
在這個步驟中,我們找到了圖片的相關路徑,就可以進行下一步上傳到 xlog 上,也就是獲得 ipfs 地址。
上傳得到 ipfs#
這一步驟,在系列文章第一篇時候得知,有一個接口可以上傳圖片得到 ipfs,這個調用即可。
得到 ipfs 地址之後重新覆蓋原文就可以。
讀取配置,是否處理 ipfs#
萬一用戶在某些情況下不想把圖片上傳到 ipfs 怎麼辦?這裡引入新的設置,是否上傳圖片到 ipfs 即可。
稍作代碼的修改適配設置選項,如果關閉按鈕,直接上傳原始內容,如果開啟,就先上傳圖片再上傳文本。
獲取 ob 的圖片數據#
這一部分非常考驗人,我目前的做法有點問題,就是某些在一級目錄的圖片有可能無法讀取,導致圖片會被忽略。
這個小坑後面有機會在處理吧,有點難。
展望#
祝你天天開心