my-lan-share:局域网 HTTP 文件共享插件
在同一局域网内,用手机浏览器访问电脑上共享的文件夹,支持 浏览文件列表、点击下载、上传文件到电脑。
本插件纯粹使用 Node.js 内置模块(http, fs, path 等),不引入任何第三方依赖。
功能
| 功能 | 说明 |
|---|---|
start_http_share | 启动局域网 HTTP 文件共享服务器,共享指定目录 |
stop_http_share | 关闭当前运行的共享服务器 |
| 随机 4 位数字 Token | 每次启动生成,所有请求必须在 URL 带上 ?token=xxxx |
| 文件列表与下载 | 手机浏览器打开共享链接,可浏览子目录、点击文件下载 |
| 文件上传 | 手机浏览器通过 <input type="file"> 上传文件到电脑 |
| 侧边栏面板 | 显示运行状态、访问链接、共享目录、Token,带“停止服务”按钮 |
| 路径安全边界 | 严格限制只能访问共享根目录之内的文件,禁止 .. 越权访问 |
安装
方式一:从 npm 安装(推荐,所有人免费可用)
插件发布到 npm 后,任何安装了 DSH 的人都可以一条命令安装:
# DSH Desktop 使用 desktop profile
dsh plugin --profile desktop add my-lan-share
# 如果是 `dsh web` 模式,改用 web profile
dsh plugin --profile web add my-lan-share
方式二:从本地目录 / tgz 安装(离线分发)
# 直接从源码目录安装
& "C:\Users\p'c\AppData\Local\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add "C:\path\to\my-lan-share"
或者先打包再分发(目标机不需要 Node 工具链):
npm pack # 生成 my-lan-share-0.1.0.tgz
dsh plugin --profile desktop add "C:\path\to\my-lan-share-0.1.0.tgz"
安装后必须完全退出并重启 DSH Desktop(托盘 → 退出,然后重新启动)。
重启后,右侧边栏会多出「局域网文件共享(my-lan-share)」标签页,在对话框中也能调用 start_http_share / stop_http_share。
验证安装
# 1) 检查插件是否已加载(Desktop 是 desktop profile)
Select-String my-lan-share "$env:APPDATA\dsh-desktop\harness\profiles\desktop\package.json"
# 2) 检查 lib 文件是否存在
Test-Path "$env:APPDATA\dsh-desktop\harness\profiles\desktop\node_modules\my-lan-share\lib\index.js"
使用
第一步:启动共享服务
在 DSH 对话框中,让 agent 调用 start_http_share 工具,传入要共享的绝对目录路径:
start_http_share({ dirPath: "F:\\测试文件" })
成功后,agent 会返回类似如下的信息:
HTTP 文件共享已启动。
共享目录:F:\测试文件
本地地址:http://127.0.0.1:49152/?token=7342
局域网访问链接(在手机浏览器打开):http://192.168.1.23:49152/?token=7342
访问令牌:7342
把 局域网访问链接(例如 http://192.168.1.23:49152/?token=7342)发到手机上,在同一 Wi-Fi 下用手机浏览器打开即可访问。
💡 端口是系统自动分配的,每次启动可能不同。Token 是 4 位随机数字,每次启动都会变化。
第二步:在手机上访问
- 确保手机与电脑在同一 Wi-Fi 局域网下。
- 手机浏览器打开返回的完整链接(必须带上
?token=xxxx)。 - 页面会显示:
- 访问令牌(4 位数字)
- 文件列表:可进入子目录、点击“上级目录”返回、点击文件名下载
- 上传表单:选择手机上的文件,点击“上传”发送到电脑的共享目录
第三步:停止共享
不再需要时,调用 stop_http_share 工具关闭服务器:
stop_http_share({})
或在 DSH 右侧边栏的 my-lan-share 标签页中,点击“停止服务”按钮。
安全说明
- 路径边界控制:服务器只允许访问
dirPath指定的共享根目录及其子目录。任何包含..或试图越出根目录的请求都会被拒绝(返回 403)。 - Token 保护:每个请求必须在 URL 中携带正确的
?token=xxxx,否则返回 401 未授权。Token 每次启动随机生成,不要将链接发给不可信的人。 - 上传限制:单个文件上传大小上限为 50 MB。
- 仅限局域网:服务器绑定
0.0.0.0,同一局域网内知晓 Token 的设备都可以访问。在不可信网络(如公共 Wi-Fi)下请谨慎使用。
文件结构
my-lan-share/
├── package.json # 插件元数据
├── cordis.patch.yml # bundle patch,注册到 profile
├── README.md # 本说明文档
├── LICENSE # MIT 许可证
└── lib/
├── index.js # Host 半:HTTP 服务器、路径安全、apply 入口
├── tools.js # Agent 工具:start_http_share / stop_http_share
├── client.js # 浏览器半:侧边栏面板(状态、链接、停止按钮)
├── server/
│ └── panelRoutes.js # 面板路由(查询状态、停止服务)
└── core/
└── log.js # 日志工具
发布到 npm(维护者)
打包内容已通过 npm pack --dry-run 校验(LICENSE / README / cordis.patch.yml / lib/**,共 9 个文件)。
cd my-lan-share
# 一次性:注册或登录 npm 账号(免费)
npm adduser --registry https://registry.npmjs.org
# 发布公开包(所有人可免费安装)
npm publish --access public --registry https://registry.npmjs.org
# 之后更新版本再发布
npm version patch
npm publish --access public --registry https://registry.npmjs.org
本机默认 registry 是
https://registry.npmmirror.com(只读镜像,不能发布), 所以发布时必须显式加--registry https://registry.npmjs.org。 发布后约几分钟 npmmirror 会同步,国内用户也能加速安装。
注意事项
- 端口由操作系统自动分配,每次启动可能不同,请以工具返回的完整链接为准。
- 共享目录必须是本机绝对路径,且当前 DSH 进程对该目录有读写权限。
- DSH Desktop 安装插件后必须重启才能生效。
- 如果防火墙拦截了该端口,手机将无法连接,请在 Windows 防火墙中放行对应端口或允许 Node.js 程序通过防火墙。