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)1000.25393.5
网页下载(GET)1000.21480.9
WebDAV 读300.27117.0
WebDAV 写308.333.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要求认证
/admin200全部可见
/guest200能进,但只看到授权目录
/文档/guest200正常
/大文件/guest403无权限
/密码错401拒绝

这个粒度够用:给同事开一个只读账号,指到某个子目录,别的地方进不去。

要做更细的按文件授权,它没这功能,得上别的方案。

网页里直接改文本

文件名后面那个铅笔图标能打开内置编辑器,地址是原路径加 ?edit。就是一个占满屏幕的文本框,右上角一个保存图标,改完点它,服务端直接写回文件。改配置、改笔记、改一行脚本,不用先下载再传回去。

它不带高亮也没有补全,写代码不合适,当记事本用刚好。

二进制文件点开走下载,不会进编辑器,这一点它自己会判断。

几处得注意的

auth 规则里写中文路径会直接起不来,报 Invalid auth value,进程退出,5000 端口也不监听。这时候换成英文目录名,或者只给根目录授权。

2 个用户写成一条参数也会失败,逗号在规则里表示同 1 个用户的多条路径。报错只有一句 Invalid auth value,看不出错在哪。

--allow-all 把删除也开了,没有回收站,删 1 次就没了。给别人用至少先把删除关掉,只开上传和搜索。

它没有缩略图,没有分享链接有效期,没有回收站,也没有按文件的权限。想要这些得看它旁边的那些大块头。

没测的部分列一下,5 项:TLS 证书 / --render-spa 静态站托管 / 文件夹打包下载 / CORS 跨域上传 / 反向代理路径前缀,都没跑。