dufs 干的事一句话说得完:把一个文件夹变成网页。打开就是一个文件列表,能上传能下载,能在网页里改文本,还认 WebDAV,Windows 里映射成盘符就能当网盘用。整个东西只有一个 3,464,192 字节的 exe,不装运行库,也不建数据库,从点开到页面能开 0.53 秒。
一个文件,3.3 MB,半秒起来
发布页上 Windows 版按架构分了两个 zip,64 位那个 1,761,134 字节,解压出来只有 dufs.exe。没有 installer,没有配置文件,也没有要先跑的初始化命令。
dufs-v0.47.0-x86_64-pc-windows-msvc.zip 1,761,134 字节
└─ dufs.exe 3,464,192 字节
进程启动到首页返回 200 0.530 秒
首页 HTML(服务端渲染的降级版) 7,729 字节
运行库依赖 无
起服务的命令只有一行,把要共享的目录当参数传进去,端口自己指定。默认端口是 5000,绑的是所有网卡,想让局域网里别人也能进,什么都不用加。
dufs.exe share -p 5000 --allow-all --allow-search
不加 --allow-all 的话,默认是只读,只能看和下载。
上传 / 删除 / 搜索 / 打包下载这 4 项要一个个开,或者用这一条全部放开。第一次跑建议先不加,确认目录里没有不该露的东西再说。
网页打开就是一张三列的表
界面没有任何花活。一行一个条目,3 列:名字 / 修改时间 / 大小,右边一列图标管下载 / 复制直链 / 删除 / 编辑。顶部工具栏是主页 / 上传 / 新建文件夹 / 文件夹打包下载和搜索框。目录和文件靠左边的图标区分,文件夹是蓝的。
share\
图片\ 3 items
大文件\ 1 item
文档\ 2 items
README.txt 328 B
会议记录.md 393 B
invoice-0921.pdf 120.0 KB
photo-raw.jpg 850.0 KB
tools.zip 1.6 MB
备份-2026-10.zip 380.0 KB
robots.txt 25 B
site-index.html 58 B
11 个条目里中文文件名、带空格的文件名都正常显示,点进去都能下载。列表按名字 / 时间 / 大小排序,点表头切换。
图片点 1 下就在浏览器里出原图,标题栏写出尺寸,不用先下载。地址栏就是文件路径,发给同事时把链接扔过去。
它没有缩略图墙,文件过 50 个以后就是一张长表格。找东西靠搜索框,搜索要开 --allow-search,默认关着。
传 100 MB 用 0.25 秒
回环地址上跑,网页端上传走的是一次 HTTP PUT,下载是 GET。传一个 104,857,600 字节的文件,从发出到服务端落盘 0.25 秒,反向拉回来 0.21 秒。
| 方式 | 数据 MB | 耗时 秒 | 速度 MB/s |
|---|---|---|---|
| 网页上传(PUT) | 100 | 0.25 | 393.5 |
| 网页下载(GET) | 100 | 0.21 | 480.9 |
| WebDAV 读 | 30 | 0.27 | 117.0 |
| WebDAV 写 | 30 | 8.33 | 3.6 |
这两个数走的是回环地址,不是真实网线。
真要放到局域网,瓶颈在网卡和交换机,不在这 3.3 MB 的程序上。
挂成盘符,卡在 50 MB
WebDAV 是同端口直接支持的,不用另开服务。Windows 里一条命令就挂上,之后资源管理器和脚本都当普通磁盘用。
net use Z: http://127.0.0.1:5000/
Z: 列目录 12 项 0.01 秒
Z: 读小文件 0.01 秒
Z: 写一个小文件 8.02 秒
Z: 读 100 MB 文件 失败,Errno 22
读大文件失败不是 dufs 的问题。Windows 自带的 WebDAV 客户端有个单文件大小上限,默认 50 MB,超过就报错,要改注册表里的 FileSizeLimitInBytes 才能放开。同一个 100 MB 文件走网页上传一次就过,差别在这里。
写入慢也有原因:Windows 的 WebDAV 客户端是一个块一个块同步提交的,小文件要 8 秒,30 MB 要 8.33 秒,速度只有 3.6 MB/s。同样的数据用网页上传是毫秒级。要频繁写大文件,别走 WebDAV,走网页或 HTTP 接口。
谁能看哪个目录,一行参数
权限写在启动参数里,没有用户管理界面,也没有数据库存账号。
规则是「用户名:密码@路径:权限」。2 个用户就写 2 个 -a,同一个用户的多条路径才用逗号隔开。
dufs.exe share -p 5001 -a "admin:dufs2026@/:rw" -a "guest:guest@/文档"
按这个配置访问,返回码是这样分的:
| 请求 | 身份 | 状态码 | 结果 |
|---|---|---|---|
| / | 不带密码 | 401 | 要求认证 |
| / | admin | 200 | 全部可见 |
| / | guest | 200 | 能进,但只看到授权目录 |
| /文档/ | guest | 200 | 正常 |
| /大文件/ | guest | 403 | 无权限 |
| / | 密码错 | 401 | 拒绝 |
这个粒度够用:给同事开一个只读账号,指到某个子目录,别的地方进不去。
要做更细的按文件授权,它没这功能,得上别的方案。
网页里直接改文本
文件名后面那个铅笔图标能打开内置编辑器,地址是原路径加 ?edit。就是一个占满屏幕的文本框,右上角一个保存图标,改完点它,服务端直接写回文件。改配置、改笔记、改一行脚本,不用先下载再传回去。
它不带高亮也没有补全,写代码不合适,当记事本用刚好。
二进制文件点开走下载,不会进编辑器,这一点它自己会判断。
几处得注意的
auth 规则里写中文路径会直接起不来,报 Invalid auth value,进程退出,5000 端口也不监听。这时候换成英文目录名,或者只给根目录授权。
2 个用户写成一条参数也会失败,逗号在规则里表示同 1 个用户的多条路径。报错只有一句 Invalid auth value,看不出错在哪。
--allow-all 把删除也开了,没有回收站,删 1 次就没了。给别人用至少先把删除关掉,只开上传和搜索。
它没有缩略图,没有分享链接有效期,没有回收站,也没有按文件的权限。想要这些得看它旁边的那些大块头。
没测的部分列一下,5 项:TLS 证书 / --render-spa 静态站托管 / 文件夹打包下载 / CORS 跨域上传 / 反向代理路径前缀,都没跑。










