前言
写这个工具的起因很简单——我们工作室几台电脑之间传文件太痛苦了。U盘插来拔去、微信传大文件各种限制、Windows 共享文件夹又老是抽风。
市面上的工具要么收费,要么要联网,要么配置复杂。
干脆自己写一个。断断续续迭代了大半个月,目前版本 v2.3,功能基本稳定了,分享出来给大家用。
这是个什么东西?
简单说就是一个跑在你电脑上的文件共享服务器,同局域网内的其他设备用浏览器就能访问、下载、上传文件。不需要安装客户端,不需要注册账号,不需要联网。
主界面图
核心特点就几点:
- 完全离线运行:所有 CDN 资源、字体、图标全部本地化,断网照样用
- 浏览器访问:电脑、手机、平板,能开浏览器的设备都能用
- 权限管理:支持多用户、只读/读写权限、管理员角色
- 公共共享 + 私人共享双模式:既有开放给所有人的公共区,也有需要登录的私人区
主要功能
1. 双模式共享
公共共享:打开浏览器输入 http://你电脑的IP:端口 就能访问,不需要登录。适合临时分享文件给不熟悉的人。
公共共享
私人共享:需要用户名密码登录,每个用户绑定自己的专属文件夹。适合团队内部使用。
私人共享
公共共享和私人共享现在整合在一个登录页了,输入地址直达,不用选来选去。
2. 用户管理
支持手动创建用户、批量导入用户(提供了 Excel 导入模板)。每个用户可以设置:
- 专属文件夹路径
- 只读或读写权限
- 是否启用
- 是否设为管理员
添加用户
导入用户
管理员账号可以远程登录管理页面(/admin),随时随地管理用户,不用非得在服务器那台电脑上操作。
3. 目录共享(跨用户)
这个功能我觉得是最好用的。举个例子:
张三是设计,他的文件夹里有"素材库"目录;李四是开发,需要用到这些素材。
张三可以把"素材库"共享给李四,并设置只读权限。李四登录后就能在自己的文件列表里看到这个共享目录,可以浏览、下载,但不能修改。
二次共享
接受共享
共享管理面板里能随时看到自己收到了哪些共享、自己分享出去了哪些共享,随时可以撤销。
分享管理
4. 文件预览
图片预览:支持上一张/下一张切换,鼠标拖拽移动,滚轮缩放。
视频播放:内置 HLS/MUX 播放器,支持常见视频格式(mp4、mov、mkv 等),自定义播放控制栏,双击全屏,键盘上下键调音量。
视频预览
音频播放:在线播放音频文件。
5. 文件管理
- 文件/文件夹的增删改查
- 新建文件夹
- 文件重命名
- 单文件上传(支持断点续传)
- 文件夹 ZIP 打包下载
- 文件分类排序:文件夹、图片、视频、音频、压缩包、文档/代码、其他——自动分组
分类视图
分类视图下点击类别标题可以展开/收起,文件名过长会自动省略中间部分但保留扩展名。
6. 带宽管理和 IP 封禁
可以限制单个用户的下载速度,封禁异常 IP。配合操作日志,谁在什么时候干了什么都清清楚楚。
带宽管理
7. 操作日志
所有操作都有记录,按天保存到 log 文件夹:
- 服务端:启动/退出、设置修改、服务启停、用户增删改、更新检测、管理页访问
- 客户端:登录/登出、上传/续传、下载、删除、新建目录
8. 在线聊天(NEW v2.3)
v2.3 新增了局域网即时通讯功能,共享文件的同时可以直接聊天沟通,不用再切到微信/QQ。
使用方法:
- 找到聊天入口:登录后,右下角有一个蓝色的聊天气泡悬浮按钮,点击即可打开/关闭聊天窗口。
- 选择聊天对象:点击悬浮按钮后,如果之前没选过人,会弹出在线用户列表。列表中显示每个用户的名字、IP 和在线状态,在线用户右侧有一个聊天图标,点击即可发起对话。
- 发送消息:打开聊天窗口后,在底部输入框输入文字,回车或点击"发送"即可。消息会实时推送到对方屏幕上,不需要刷新。
- 发送图片和附件:输入框上方有两个按钮——图片按钮和附件按钮,点击可选择本地图片或文件发送。
① 可发送图片、文件
② 接收方可点击预览、下载
- 新消息提醒:当收到新消息但聊天窗口未打开时,右下角的悬浮按钮会变成琥珀色并持续闪烁。点击闪烁的按钮会直接打开未读消息发送者的聊天窗口,不会错过任何消息。
- 窗口拖拽:聊天窗口支持拖拽移动,拖住蓝色标题栏即可调整位置,方便边看文件边聊天。
技术特点:
- 基于 SSE(Server-Sent Events)实现消息实时推送,延迟极低
- 消息按聊天对象分别存储,切换对话不会丢失历史记录
- 完全局域网内通信,消息不经过外网
9. 自动更新
软件启动时自动检测新版本,有新版本会弹窗提示,可以一键下载更新。
10. bug提交入口
如发现软件有bug,可选择软件自身的bug提交入口,方便无法上传图片的用户
技术栈
- 后端:.NET 8,ASP.NET Core Minimal API
- 前端:原生 HTML/CSS/JS + Tailwind CSS(本地化),WebView2 做桌面壳
- 播放器:HLS.js + Mux.js 本地化
- 图标:SVG Sprite 内联(完全离线,不依赖任何 CDN)
使用方式
- 下载解压,运行
LanFileShare.exe
- 软件自动启动服务,默认端口 8080
- 主界面显示访问地址和二维码,扫码即可访问
- 在管理页面(
/admin)创建用户、设置文件夹
- 搞定
托盘图标右键菜单可以快速打开管理页、退出程序。
一些细节
说几个开发过程中踩坑和觉得值得提一下的点:
离线化改造:之前图标用的是 iconify-icon 这个 Web Component,它底层会 fetch 远程 API 拿 SVG 数据。好几位网友测试发现所有图标都挂了,才意识到这个问题。
然后贫道将自己使用的电脑断网运行,一切正常,但网友的问题仍然存在,最后还是用的虚拟机断网才测出来问题。后来把所有图标(92 个)全部抓下来做成 SVG Sprite
内联到页面里,CDN 的 CSS/JS 也全部本地化,这才真正做到离线可用。
断点续传:上传和下载都支持 Range 请求,大文件传输中途断了可以续传,不用从头来。上传单文件大小理论上没有硬限制(公共共享区之前限制 500MB,现在也改成了200GB)。
5G 上传 Bug:之前有个道友反馈上传 5G 的文件会失败,排查发现是 ASP.NET Core 默认的请求体大小限制导致的,改了 MaxRequestBodySize 解决。
目录共享的权限检查:共享文件夹的写权限需要穿透检查——用户访问 __shared__/shareId/子目录/文件 这种路径时,要先解析出原始的共享记录,再根据 WritePermission 字
段判断能不能写。搞了个 ResolveSharedPath 辅助函数统一处理,不然每个 API 都要写一遍判断逻辑。
面包屑导航:共享文件夹进入子目录后,面包屑要正确显示"所有文件 / 共享文件夹名 / 子目录 / ...",需要在前端缓存共享文件夹的名称映射,因为进入子目录后 API 返回的路径
里没有共享名称信息。
适用场景
- 工作室/小团队内部文件共享
- 家庭局域网内多设备传文件
- 临时分享大文件给同事(不用插 U 盘)
- 内网文件服务器(完全不出外网,安全可控)
不足和计划
- 关于支持 HTTPS(局域网场景下不太需要)
- 没有文件搜索功能(已实现)
- 后续考虑加个简单的聊天/留言功能,方便共享者之间沟通(已实现)
ps.以上预计3个版本内实现
下载地址
https://wwbjv.lanzout.com/b00q1hm0mf
密码:7da4
有什么问题或者建议欢迎留言,我尽量回复。如果觉得有用,还请鼓励一下~