WebDAV 备份与自动同步
通过 WebDAV 服务器定期备份账号与偏好设置,实现多设备共享、版本回滚与灾备。
功能亮点
- 一键备份/还原:在「导入导出」页面填写 WebDAV 凭据后,可随时上传或下载 JSON 备份。
- 自动同步:后台定时同步(默认 1 小时),根据策略自动合并或覆盖数据。
- 多策略支持:可选择“合并 / 仅上传 / 仅下载”,满足主次设备差异化需求。
- 冲突合并:合并模式下按更新时间保留较新的账号、书签与偏好;删除账号或书签时会记录删除标记,避免旧备份在下次同步后把它们重新带回。
- 安全写入:上传备份时会先写入同目录临时文件,读回校验后再移动到正式备份文件,降低上传中断造成远端备份损坏的风险;若坚果云在目标文件已存在时对
MOVE返回 409,扩展会先删除正式备份再重试移动。
前置条件
- 准备可访问的 WebDAV 服务端:如 Nextcloud、坚果云、Alist WebDAV、NAS 等。
- 获取
URL / 用户名 / 密码,确保具备读写权限。 - 若需自动同步,建议让浏览器常驻后台(桌面 Chrome/Edge 或移动端 Kiwi)。
配置入口
- 打开扩展 → 导入导出 → 「WebDAV 设置」。
- 填写:
- 服务器地址:可指向目录或具体 JSON 文件;若填目录将自动在其下创建
all-api-hub-backup/all-api-hub-1-0.json。 - 用户名/密码:用于 Basic Auth。
- 服务器地址:可指向目录或具体 JSON 文件;若填目录将自动在其下创建
- 点击 “测试连接” 验证配置无误,随后可执行“上传备份”或“下载备份”。
自动同步
在同一页面启用 “自动同步” 可后台定时同步:
| 选项 | 说明 |
|---|---|
| 开启自动同步 | 对应 webdav.autoSync 开关,关闭后仅保留手动备份。 |
| 同步间隔 | 以秒为单位,默认 3600 秒(1 小时)。 |
| 同步策略 | merge(合并)、upload_only(以本地覆盖远程)、download_only(以远程覆盖本地)。 |
| 立即同步 | 触发 webdavAutoSync:syncNow,便于调试;若正在同步会提示稍后再试。 |
调度流程
- 用户保存设置后,
webdavAutoSyncService.setupAutoSync()会重新创建setInterval定时器。 - 执行同步时:
- 先调用
testWebdavConnection确认凭据有效。 - 下载远程备份(若不存在则视为首次备份)。
- 导出本地账号与偏好,依据策略决定最终数据:
- 合并:根据
updated_at/lastUpdated时间戳保留最新项;账号与书签的删除标记会随同步参与合并,防止已删除条目被旧远程副本恢复。 - 仅上传/下载:直接选取本地或远程数据。
- 合并:根据
- 将合并结果写回本地(通过
accountStorage.importData+userPreferences.importPreferences)。 - 生成新的 JSON 后,先上传到同目录的临时文件,读回校验内容,再移动到已配置的备份文件;只有当 WebDAV 目标是目录 URL 时,才会使用默认生成路径
all-api-hub-backup/all-api-hub-1-0.json。超过 24 小时的旧临时文件会在后续上传时尽力清理。
- 先调用
- 同步状态(成功/失败、最后执行时间)会通过
WEBDAV_AUTO_SYNC_UPDATE消息广播,可在前端监听或查看控制台日志。
安全建议
- 建议在 WebDAV 端为备份目录单独创建子账号或访问令牌。
- 勿在公共设备上保存 WebDAV 密码,必要时定期更换。
- 若同步失败提示 401/403,请确认服务器支持 Basic Auth 并允许
MKCOL/PUT/GET方法。
常见问题
| 问题 | 处理方式 |
|---|---|
| 测试连接失败 | 检查 URL 是否包含协议(https://),以及是否允许远程写入。 |
| 自动同步无反应 | 可能因浏览器被系统休眠或未启用自动同步;重新打开扩展并保存设置。 |
| 合并后出现重复账号或书签 | 手动删除重复项并重新上传;如需严格控制,请使用 “仅上传” 策略。已删除的账号和书签会通过删除标记参与后续合并,通常不会被旧备份重新恢复。 |
| 上传前提示远端备份损坏 | 表示现有 WebDAV 备份不是有效 JSON。确认本设备数据完整后,可以按提示用当前设备的全部共享数据重建远端备份;若本设备数据不完整,请先从数据完整的设备上传或导入完整备份。 |
| 坚果云覆盖上传时出现 409 | 坚果云可能在正式备份文件已存在时对带 Overwrite: T 的 MOVE 返回 409。扩展会自动删除目标文件并重试移动,通常无需手动处理。 |
| JSON 文件过大 | 建议定期清理已失效账号或分批导出,避免超出 WebDAV 限制。 |
