
GLFzr/dsh-file-upload
51最近提交 2026年8月15日
dsh-file-upload DSH 插件
本插件替换 DSH Web GUI 原版仅图片的附件通道,允许拖入任意文件类型(PDF、ZIP、Excel、代码、图片等)。文件上传到本机中转目录,输入框出现蓝色文件 chip,agent 可直接读取。Chromium 浏览器支持零上传(本机文件直引),其他情况走分块上传并校验完整性。
如何安装 dsh-file-upload DSH 插件
dsh plugin --profile web add ./plugins/file-upload复制不会执行命令。安装 dsh-file-upload DSH 插件前请核对仓库和版本。
dsh-file-upload DSH 插件数据来源
dsh-file-upload DSH 插件快照日期:2026年8月16日
discovered
dsh-file-upload DSH 插件能做什么
- 页面任意位置拖入任意文件类型
- Chromium 浏览器(Edge/Chrome)本机文件零上传直引
- 文件以蓝色 chip 整体插入输入框,不可被局部删改
- 两级去重(快路径:同名+同大小+修改时间一致;sha256 逐字节比对)
- 分块上传,上限 512MB,base64 完整性校验
- 侧边栏垃圾桶图标,支持清理冗余副本、按大小清理、清空全部
dsh-file-upload DSH 插件适合哪些场景
- 上传大型 PDF 文档供 AI 分析
- 拖入 ZIP 代码或数据包交给 agent 处理
- 在对话中同时分享 Excel 表格和图片
- 一次拖入多个文件(无 16 个限制)进行批量处理
- 使用 Chromium 浏览器无需上传直接引用本地文件
dsh-file-upload DSH 插件适合谁
- DSH Web GUI 用户,需要上传非图片文件(PDF、代码、压缩包等)给 AI agent
- 需要频繁与 DSH agent 共享本地文件的开发者和高级用户
dsh-file-upload DSH 插件的限制
- 单文件上传期间宿主进程持有全部 base64 分块(512MB 文件约 683MB 字符串),并发大文件占用显著内存
- Chromium 零上传路径依赖 `webkitGetAsEntry()`,OneDrive 占位文件或虚拟文件系统可能失败
- 清理中转目录不可逆,历史会话引用的文件会失效
- 仅适用于 DSH Web GUI 环境,不适用于 CLI 版本的 Hermes/Codex
- 仅支持现代浏览器的文件拖放功能
dsh-file-upload DSH 插件的仓库 README 摘录
以下文字摘自 dsh-file-upload DSH 插件的上游仓库 GLFzr/dsh-file-upload 的 README,版权归原作者,仅作引用。
把 DSH Web GUI 原版**只支持图片**的附件通道,扩展为**任意文件上传**:拖入任意文件(PDF、3MF、ZIP、Excel、代码、图片……)→ 文件上传/引用到本机中转目录 → 输入框出现一个**蓝色文件 chip** → agent 可以直接读取该文件。 > **定位说明(v2.0.0 起)**:本插件的本质是**文件上传功能**,不是"路径展示"。路径只是内部机制——agent 读取文件必须依赖磁盘路径,浏览器又拿不到(见下文"为什么必须上传"),所以插件负责把文件物化到本机、并把路径交给 agent。用户界面不再出现任何路径概念:chip 只显示文件名,用户只需知道"文件上传好了,agent 能读了"。 本仓库是**持久化 profile 插件**(`dsh.bundle` + `dsh.client` 双声明):按官方方式安装一次,**DSH 重启后自动生效**。 ## 功能特性 - 🖱️ **页面任意位置拖入任意文件**(多文件、图片均可);拖拽时全屏提示"松开以接收文件" - 📦 **任意文件类型**:原版"仅图片"附件通道被完全静默接管,任何文件都可拖入 - 📍 **本机文件零上传直引**:Chromium(Edge/Chrome)拖拽会经 entry API 暴露源文件路径——直接引用,**零上传、零复制**(你电脑里那份文件就是唯一的一份);仅当浏览器拿不到路径(如 Firefox)时才走上传中转 - 🔵 文件以**一个整体 chip** 插入输入框:蓝色文字(**只显示文件名+格式**)、不可被局部删改(Backspace/Delete 一次删除整个引用) - 📐 **篮筐宽度随文件名自适应**:插入时用 composer 真实字体实测文件名宽度,pill 精确贴合(误差 <1 个字符) - 🙈 **内部细节全部隐藏**:`.b64` 后缀、`_1/_2` 重名序号、中转目录路径——用户界面永远看不到;提交给 agent 的才是完整真实路径 - ♻️ **两级去重(先查后传,防误复用)**:`begin` 快路径命中条件 = 同名 + 同大小 + **manifest 登记的源文件修改时间与本次拖入一致**——重复拖同一文件仍**秒回**(零上传);但**编辑过且字节数没变的文件绝不误复用**(v2.1.0 起,新/旧文件首次拖入都先完整上传,由 `end` 的 sha256 逐字节比对裁决:内容相同复用旧路径,内容不同落 `_1` 副本) - 📇 **中转目录清单(manifest)**:插件把每个自己写入的文件登记到 `~/.dsh-dropbox/.dsh-manifest.json`(原名、源修改时间、sha256、是否自动编号副本)——清理面板的"冗余副本"标记只认清单,**不会把 `not
阅读完整 README仓库许可: MIT
dsh-file-upload DSH 插件常见问题
为什么 agent 不能从浏览器直接读取我的本地文件?
浏览器是沙盒环境,出于安全考虑,JavaScript 无法获取本地文件的磁盘路径。agent 只能通过磁盘路径读取文件。本插件必须先将文件上传到本机中转目录(或在 Chromium 上直接引用原路径),agent 才能访问。这是浏览器的根本限制,不是本插件的缺陷。
为什么我从本地拖拽文件时插件还要上传?
除 Chromium 内核浏览器外,拖拽事件只提供内存中的 File 对象,不包含磁盘路径。插件必须将文件内容上传到中转目录,为 agent 生成磁盘路径。在 Chromium(Edge/Chrome)上,插件可以通过 `webkitGetAsEntry()` 获取原始文件路径,从而跳过上传(零上传)。
如果我多次拖入同一个文件会怎样?
插件使用两级去重。首先检查清单中是否有同名、同大小且修改时间一致的文件,如果有则直接复用现有路径(零上传)。如果内容不同(例如编辑后字节数未变),则完整上传并比对 sha256;如果内容相同则复用旧路径,否则创建 `_1` 副本。
如何清理上传的中转目录?
点击侧边栏底部的垃圾桶图标(设置图标上方),弹出清理浮层。您可以查看文件列表、删除冗余 `_N` 副本、按大小删除文件,或清空全部。⚠️ 清理不可逆,会破坏引用这些文件的历史会话,操作前请确认。
上传的文件为什么有的带 `.b64` 后缀?
当插件走上传路径(非零上传)时,二进制文件(PDF、ZIP、图片等)以 base64 文本保存,文件名追加 `.b64` 标记,确保二进制数据能无损通过 JSON/文本通道。agent 需要先解码 base64 再使用(如 Python 的 `base64.b64decode()`)。文本文件(`.md`、`.txt`、`.json`)直接保存,不带 `.b64`。UI 中的 chip 只显示原始文件名,不显示 `.b64`。