EasyLocalDav:把本地文件夹变成 Zotero 可用的 WebDAV

1
2
3
$ open EasyLocalDav.app
$ rclone serve webdav ~/Documents/ZoteroDav --addr 127.0.0.1:8080
$ zotero sync

EasyLocalDav 是我写的一个 macOS 菜单栏小工具。它做的事情很简单:把本机的一个文件夹包装成 WebDAV 服务,让 Zotero 这类应用可以用标准 WebDAV 协议读写这个文件夹。

这个项目不是要重新发明 WebDAV 服务器。真正负责协议实现的是 rclone serve webdav,EasyLocalDav 负责把配置、启动、停止、状态显示和开机恢复做成一个容易使用的 macOS App。

为什么需要它

Zotero 的附件同步有几种常见方式:官方存储、第三方 WebDAV、手动同步目录。官方存储最省事,但容量有限;自己部署 WebDAV 又要维护服务器、证书、账号和网络环境。

很多时候我真正想要的是:

1
2
3
4
Zotero
-> 本机 WebDAV 地址
-> 本地文件夹
-> OneDrive / iCloud Drive / Dropbox

也就是说,Zotero 只需要看到一个 WebDAV 服务,底层文件还是落在本机目录里,再交给已有的云盘客户端同步。EasyLocalDav 解决的就是这中间的一层适配问题。

它怎么工作

每个服务对应一个本地目录、一个监听地址、一个端口和一组 WebDAV 账号密码。

在 App 里点 Start 后,背后启动的是类似这样的命令:

1
2
3
4
5
6
rclone serve webdav \
--addr 127.0.0.1:8080 \
--log-level INFO \
--user easylocaldav \
--pass easylocaldav \
/path/to/local/folder

如果服务启动成功,Zotero 看到的就是:

1
http://127.0.0.1:8080/

但实际写入的位置是你选择的本地文件夹。

基本使用流程

安装后打开 EasyLocalDav,它不会出现在 Dock 里,只会常驻菜单栏。

第一次使用可以按这个流程:

1
2
3
4
5
6
7
8
1. 点击菜单栏图标,打开 EasyLocalDav
2. Add Service
3. 选择一个本地目录
4. Host 选择 127.0.0.1
5. Port 填 8080 或其他未占用端口
6. 设置用户名和密码
7. 启用服务
8. 复制 WebDAV URL

在 Zotero 里配置同步时填写:

1
2
3
URL:      http://127.0.0.1:8080/
Username: easylocaldav
Password: easylocaldav

日常使用推荐绑定 127.0.0.1。这个地址只允许本机访问,适合 Zotero 这种本机应用,不会把 WebDAV 服务暴露给局域网里的其他设备。

配合云盘使用

比较实用的目录选择方式,是把 WebDAV 根目录放在云盘同步目录下面,例如:

1
2
3
~/Library/CloudStorage/OneDrive-Personal/ZoteroDav
~/Library/Mobile Documents/com~apple~CloudDocs/ZoteroDav
~/Dropbox/ZoteroDav

这样 Zotero 写入附件后,EasyLocalDav 把文件落到本地目录,云盘客户端再负责跨设备同步。

多台 Mac 上可以使用相同的逻辑:

1
2
Mac A: Zotero -> 127.0.0.1:8080 -> OneDrive/ZoteroDav
Mac B: Zotero -> 127.0.0.1:8080 -> OneDrive/ZoteroDav

每台机器上的 Zotero 都访问自己的 localhost,文件同步交给云盘。这样不需要在公网部署 WebDAV,也不用处理域名和证书。

局域网模式

EasyLocalDav 也支持把 Host 设置成 0.0.0.0。这会让服务监听所有网卡,局域网里的其他设备可以通过这台 Mac 的局域网 IP 访问:

1
http://192.168.1.23:8080/

这个模式适合临时共享文件夹,或者给同一局域网内的设备提供 WebDAV 入口。

但它有明显的安全边界:0.0.0.0 会把服务暴露给当前网络里的其他设备。只应该在可信网络里使用,并且应该改掉默认密码。

App 里做了哪些管理

EasyLocalDav 的价值不在于命令本身,而在于把容易忘、容易错的部分变成稳定的桌面体验。

它会在启动服务前检查:

1
2
3
4
5
6
host 是否只在 127.0.0.1 / 0.0.0.0 之间选择
port 是否在 1-65535 范围内
本地目录是否存在
本地路径是否真的是目录
端口是否已经被占用
rclone 是否可用

服务运行后,主界面会显示状态:Stopped、Starting、Running 或 Failed。运行中的服务会锁定配置表单,避免一边修改配置一边让后台进程继续跑旧参数。

菜单栏图标也会反映整体状态:没有服务、全部停止、正在运行,或者有服务失败需要处理。

自动恢复和开机启动

如果启用了 Launch at Login,EasyLocalDav 会随 macOS 登录启动。

如果启用了 Restore Enabled Services,App 启动后会自动恢复之前处于 Enabled 状态的服务。这个组合适合长期使用 Zotero 的场景:开机后不用手动打开终端,也不用重新执行 rclone 命令。

配置文件保存在:

1
~/Library/Application Support/EasyLocalDav/config.json

里面记录服务列表、自动恢复选项、更新检查状态等信息。

发布和维护

release 包会把 rclone 打进 App bundle 里,所以普通用户不需要先装 Homebrew 或手动安装 rclone。

开发环境下,如果 App bundle 里没有 rclone,它会尝试从这些位置查找:

1
2
3
4
/opt/homebrew/bin/rclone
/usr/local/bin/rclone
/usr/bin/rclone
which rclone

项目也有 GitHub Actions release workflow:打 tag 后构建 Apple Silicon 版本,下载官方 rclone darwin arm64 二进制,打进 App,然后生成 EasyLocalDav-arm64.dmg

适合什么,不适合什么

EasyLocalDav 适合这些场景:

1
2
3
4
Zotero 附件同步
把云盘本地目录包装成 WebDAV
临时给局域网设备提供 WebDAV 访问
不想维护完整服务器的人

它不适合这些场景:

1
2
3
4
5
公网 WebDAV 服务
多人权限管理
复杂审计日志
高并发文件服务
替代云盘同步客户端

它的定位应该保持克制:一个本机 WebDAV 适配器,一个给 Zotero 和本地目录之间搭桥的菜单栏工具。

总结

EasyLocalDav 的核心思路是把复杂度留在本地:不部署服务器,不申请证书,不暴露公网端口。Zotero 访问 localhost,文件落到本地目录,跨设备同步交给现成的云盘。

这类工具不需要做得很大。它只要稳定地完成一件事:把一个本地文件夹变成一个可控、可恢复、容易配置的 WebDAV endpoint。


EasyLocalDav:把本地文件夹变成 Zotero 可用的 WebDAV
https://jeremyguo.space/2026/06/19/easy-local-dav/
作者
郭俊毅 / JeremyGuo
发布于
2026年6月19日
许可协议