dsh-at-file
FSMargoo/dsh-at-fileCodex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
允许将任意文件上传给 DSH,按工作区与会话隔离。输入框内置文件库,服务端生成缩略图,右键菜单可打开、复制、重新下载或删除。
🇬🇧 English: README.en.md
这个插件允许你将任意文件上传给 DSH,上传后的文件是工作区+会话隔离的。
尤其适合:DSH 运行在单独服务器上的用户——聊天里直接上传文件到服务器,后续直接 @ 引用。
| 文件库弹层(上传 / 列表 / 行内动作) | 右键操作菜单(6 个动作) |
|---|---|
<会话工作区>/.uploaded_files/<sessionId>/(隐藏目录)_1/_2 数字后缀,@UPLOAD: 引用名 = 目录内实际文件名readdir + stat(按 mtime 降序,最新上传在最顶上).thumbs/<原文件名>.jpg;列表接口天然跳过点开头目录,不污染文件库immutable 长期缓存ffmpeg(图片/视频)与 pdftoppm(PDF,poppler);缺失或失败时该文件回落为原图(图片)或类型徽章(视频/PDF),不影响上传与列表normalize(join()) 必须仍在本会话目录内)sessionId 严格校验(UUID 格式),工作区从会话自身 header.cwd 解析,不信任客户端传入的路径POST /uploads/prepare {sessionId, name, size} → {uploadId, putUrl, commitUrl, deleteUrl}PUT /uploads/<id> 流式上传(application/octet-stream,inline sha256)POST /uploads/<id>/commit {expectedSha256} → {name, displayName, absolutePath, size, createdAt}DELETE /uploads/<id> 取消(已 commit 的 id 返回 404,客户端吞掉)GET /sessions/<sessionId>/attachments 目录列表GET /attachments/content?sessionId&name 下载 / 打开(防路径穿越)GET /attachments/thumbnail?sessionId&name 服务端缩略图(懒生成,image/jpeg + immutable 缓存;不支持的类型 404,客户端回落)DELETE /sessions/<sessionId>/attachments?name= 删除已提交文件(连带删除缩略图)pnpm install
pnpm run build
dsh plugin --profile web add github:seeingrain/dsh-upload-file
# host 半边需要重启 web;client 半边下次刷新页面即加载
本地开发链接方式:在 profiles/web/package.json 的 dependencies 里加
"dsh-upload-file": "link:<本仓库路径>",并在 bundles 列表追加 dsh-upload-file,然后 pnpm install。
MIT — 见 LICENSE。