iOS 资源

iPhone 访问电脑文件:dufs 搭 WebDAV

🐯网盘助手 LV1 · 4 次浏览 · 0 条回复

手机上临时要一份放在电脑里的合同,第一反应总是打开聊天软件传给自己,然后卡在体积限制上,或者干脆忘了文件叫什么。电脑和手机明明连在同一个路由器下面,中间却隔着一整套聊天工具。iOS 又不给「网上邻居」,想直接翻电脑里的文件夹,就只剩两条路:SMB 和 WebDAV。这两条我都在 Windows 这台机器上搭过,最后留下来的是后者——一个 3.3MB 的单文件程序,dufs。

iPhone 访问电脑文件:dufs 搭 WebDAV

为什么先排除 Windows 自带的共享

右键「属性 - 共享」是 Windows 上最顺手的做法,但它有几个躲不开的麻烦:得给共享建账号,SMB 服务要开着,445 端口一旦被运营商封掉或者被安全软件拦,外面就别想连了;iOS 的文件 App 连 SMB 时对匿名访问几乎不认,用户名密码填错一次就反复弹验证框,隔几天还要重连。

WebDAV 本质是跑在 HTTP 上的协议,走 80/443,穿 NAT、挂反向代理、套 HTTPS 都是常规操作,一个二进制在 Windows、群晖、树莓派、OpenWrt 上跑起来长得一模一样。对「手机看电脑」这种需求,它比 SMB 省事得多。

一个单文件,三条命令

dufs 是 Rust 写的开源文件服务器,GitHub 上 11,009 个 star,v0.47.0 在 2026 年 10 月 17 日发布,仓库到 10 月 30 日还有新提交,不算弃坑项目。Windows 版压缩包 1.68MB,解压出来只有一个 dufs.exe,3.30MB,没有运行时、没有依赖、不用装。

启动就是一句话:

dufs.exe D:\共享 --port 5000

默认端口是 5000。启动日志会把本机所有网卡地址一次性列出来,IPv4、IPv6 都有好几条,手机那头照着抄就行。想让它开机就跑,扔进任务计划程序加个「登录时触发」,或者用 nssm 注册成服务,比装一整套网盘客户端轻太多。

实测下来的数字

几个数字都是在这台 Ryzen 5 3550H、Win11、SSD 的机器上跑出来的,走回环地址,所以偏乐观,真实 WiFi 下瓶颈在无线那头:

  • 从双击到能响应第一个请求:50ms;套上 TLS 之后 399ms(多出来的是握手和读证书)
  • 空闲内存:9.0MB、10.7MB、11.0MB,三个不同参数启动的实例分别是这个数
  • 200MB 单文件下载:第一次 904ms(约 221MB/s),页缓存热了以后三次是 0.37、0.39、0.51 秒
  • 200MB 上传:1.68、1.78、2.11 秒,折合 95~120MB/s,卡在写盘
  • 列一个 500 文件的目录(PROPFIND Depth:1):79ms,响应体 167.6KB
  • 列 2000 个文件:0.34 秒,响应体 656KB
  • 整个文件夹打包下载(?zip,2000 个小文件):1.93 秒,283KB
  • 按文件名搜索(?q=):30ms

内存这一栏值得单独说一句。9MB 意味着它可以直接塞进内存只有 128MB 的路由器里,和 NAS 上那套要吃掉几百兆的服务完全不是一个量级。

还有一个反直觉的点:目录从 500 个文件涨到 2000 个,耗时只从 79ms 变到 340ms,可响应体从 167KB 涨到 656KB,翻了近四倍。手机上感受最明显的不是服务端慢,而是这坨 XML 要在无线里走一遍,目录越大,点进去转圈越久。所以真拿它当盘用,最好按年份、按项目分好子目录,别让一个文件夹躺几千个文件。

五个坑,我一个个踩过去

1. --auth 不能只写账号密码。 照直觉写 --auth demo:demo123,进程会直接打一行 Error: Invalid auth 然后退出,很容易误判成端口被占。正确写法要带路径规则:--auth "demo:demo123@/:rw",@ 后面是路径和权限。

2. 默认是只读的。 不加参数直接 PUT,返回 403。第一次用会以为是手机端的问题。

3. --allow-all 等于匿名可写。 这个参数把上传、删除、搜索全打开,而且不需要任何凭据——我这边不带认证头 PUT 一个文件,返回 201,局域网里任何一台设备都能往里塞东西。只在家里自己用还行,接了公司网络千万别这么开。

4. 上传和删除是两个开关。 只加 --allow-upload,能传但删不掉,DELETE 照样 403,要删得再补 --allow-delete。

5. HTTPS 得自己给证书。 --tls-cert / --tls-key 指向 pem 文件就行,但一旦启用,用 http:// 访问同一个端口不是跳转,是直接连不上;手机上的地址必须写 https://。自签证书 iOS 会拦下来,要么装个描述文件信任它,要么内网干脆走 http。

另外提一句中文文件名:带空格和中文的文件 PUT 上去返回 201,列目录也能正常显示,这块不用额外折腾编码。

和「一行命令」比:501 是分水岭

以前图省事都是 python -m http.server,一行命令搞定。同机对比下来,200MB 下载 0.787 秒,比 dufs 那 0.9 秒还快一点点;但 PROPFIND 和 PUT 全部返回 501,直接告诉你「没实现」。

501 这两条就把路堵死了:浏览器里点着下载没问题,可 iOS 文件 App 连不上,也传不上去。要的是「像本地盘一样用」,不是「开个网页下文件」。速度更快但协议不全,等于白搭。内存上 python 那套 29.2MB,dufs 9MB,多出来的都是解释器。

它也抢不了 NAS 系统的活:没有多用户、没有回收站、没有细粒度权限,也不做媒体刮削。这些需求该上 Alist、Immich 那一套。dufs 只解决一件事——一台机器、一个目录、手机能读能写,十几兆内存搞定。

手机上怎么连

文件 App → 浏览 → 右上角三个点 → 连接服务器 → 地址填 http://192.168.x.x:5000 → 选「注册用户」填上前面 --auth 里那组账号密码。

连上之后它就是一个位置,和 iCloud 平级:PDF、图片、视频点开就能看,能「拷贝到我的 iPhone」存本地,也能从相册直接往里拖。适合干的事是——把电脑上下好的剧集、扫描件、安装包放在一个目录里,手机随时翻。

有一点要有心理准备:iOS 切到别的 App 待一会儿,系统会把传输掐掉,几百兆的大文件别一边传一边刷别的。

你们那边是把电脑目录挂给手机用,还是老老实实插数据线?

回复

还没有回复,抢个沙发

登录后即可参与讨论

去登录 注册账号

相关帖子