dsh-drop-path:將本地文件拖入 DSH 時自動填入絕對路徑

前言

DSH 的輸入框默認只接受圖片附件。拖入本地文件(如 .txt、.pdf、代碼文件)通常會被拒絕,操作無響應。

本插件接管這類被拒絕的拖放操作:提取文件在磁盤上的真實路徑,寫進輸入框,並順手複製到剪貼板。於是可以直接把路徑發給模型去讀。

這是什麼

dsh-drop-path 是一個 DSH 服務端 bundle 插件(cordis 風格)。它通過註冊路由並在網頁 index 中注入客戶端腳本,在 window 的捕獲階段監聽拖放事件。利用 DSH Desktop 暴露的 window.__DSH_DESKTOP_FILE_PATH__.getPathForFile(file)(基於 Electron 的 webUtils.getPathForFile)解析出絕對路徑。

核心功能

  1. 自動提取並填入本地文件絕對路徑。
  2. 自動複製文件路徑到剪貼板。
  3. 支持非圖片文件拖放(如 .txt、.pdf)。
  4. 提供三種模式切換(自動/總是/關閉)。
  5. 兼容 textarea 與 contenteditable 輸入框。
  6. 僅桌面端有效(依賴 DSH Desktop 預加載橋)。

安裝與啓用

通過官方安裝命令將插件加入指定 profile:

dsh plugin --profile <profile> add dsh-drop-path

安裝後刷新網頁即可生效。新增 bundle 需重啓 DSH 或重新加載 profile。

工作原理與模式

本插件通過監聽 window 捕獲階段的拖放事件來接管操作,這早於 DSH 自帶的 ComposerAttachments 浮層監聽,從而避免觸發浮層顯示,防止浮層卡死的問題。

左下角有一個「路徑拖放」開關,用於切換模式:

  • 自動(默認):非圖片文件拖放時填入路徑;純圖片拖放時交回 DSH 處理爲附件。
  • 總是:所有文件的拖放都填入路徑(包括圖片)。
  • 關閉:不攔截,恢復 DSH 原行爲。

狀態保存在瀏覽器的 localStorage 中。

控制台可手動切換模式:

window.__dshDropPath.setMode('off'|'auto'|'always')
window.__dshDropPath.mode()        // 讀當前模式
window.__dshDropPath.reset()       // 清除可能殘留的拖拽浮層

使用示例

  1. 將本地文件拖拽到 DSH 桌面端輸入框。
  2. 在瀏覽器控制台執行上述命令切換模式。
  3. 運行測試:
node test/logic.test.mjs

注意事項

  • 僅桌面端有效:普通瀏覽器出於安全限制無法獲取本地路徑。本插件在無 preload 橋時會自動降級,不影響 DSH 原行爲。
  • 衝突處理:通過捕獲階段監聽並 stopPropagation(),避免與 DSH 自帶拖放浮層打架。
  • 熱更新:僅修改客戶端腳本 (client/drop-path.js) 時無需重啓服務端,刷新頁面即可。

總結

這個插件解決了在 DSH 中直接引用本地文件路徑的痛點。通過簡單的拖拽操作,開發者可以將文件路徑直接交給模型處理,無需手動複製粘貼。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜