Skip to content

🐛 WebDAV verify 移除写探针,修复坚果云同步失败 (#1444)#1445

Merged
CodFrm merged 1 commit into
mainfrom
fix/webdav-verify-jianguoyun
May 15, 2026
Merged

🐛 WebDAV verify 移除写探针,修复坚果云同步失败 (#1444)#1445
CodFrm merged 1 commit into
mainfrom
fix/webdav-verify-jianguoyun

Conversation

@CodFrm
Copy link
Copy Markdown
Member

@CodFrm CodFrm commented May 15, 2026

Checklist / 检查清单

  • Fixes mentioned issues / 修复已提及的问题
  • Code reviewed by human / 代码通过人工检查
  • Changes tested / 已完成测试

Description / 描述

close #1444

问题

Beta 1.4.0.1300 中坚果云(jianguoyun)WebDAV 同步失败:

  • URL 填 https://dav.jianguoyun.com/dav/ → 备份/同步直接失败
  • 改成 https://dav.jianguoyun.com/dav/ScriptCat 能跑,但会在已有的 ScriptCat/ 下再嵌套创建 ScriptCat/ScriptCat/

根因

#1395 (commit 27006fe) 把 WebDAV.verify() 从单纯的 getQuota() 扩展为「列目录 + 在 basePath 写探针 .scriptcat-verify-${Date.now()}-${Math.random().toString(36).slice(2)} + 清理」。

坚果云对 WebDAV 文件/目录名有长度限制,会以 sandbox name is too long 拒绝这个探针目录名(.scriptcat-verify- + 13 位时间戳 + - + 11 位随机串 ≈ 43 字符),导致 FileSystemFactory.create 阶段 verify 就抛错,整个备份流程中断。

第二种 URL 之所以"看起来能用",是 webdav client 的 base URL 已经指向 ScriptCat/,但紧跟着 synchronize.ts:292 又会 createDir("ScriptCat") + openDir("ScriptCat"),于是嵌套出了 /ScriptCat/ScriptCat

修复

回退 verify 到只读校验:保留 getQuota() + getDirectoryContents(basePath),移除 createDirectory/putFileContents/deleteFile 写探针。

理由:

  1. 不同 WebDAV 服务对文件名/路径有各种隐性限制(坚果云是长度,其它服务可能是字符集、隐藏文件、配额前置等),verify 阶段在 basePath 写一个通用探针是脆弱设计。
  2. 写权限不足并不会被静默吞掉——backupToCloud/buildFileSystem 紧接着会调用 createDir("ScriptCat"),权限/配额问题会在那里立即抛错,最多延后一两个 RTT。
  3. 探针失败/网络中断时会在用户网盘根目录残留 .scriptcat-verify-* 垃圾,体验不好。

参见 #1395 下的回复。

Screenshots / 截图

无 UI 变更。

Test plan

  • pnpm test -- --run packages/filesystem/webdav/webdav.test.ts 全部通过(19/19)
  • pnpm run typecheck 通过
  • 用坚果云账号实际验证:URL https://dav.jianguoyun.com/dav/,备份后只生成 /ScriptCat

#1395 引入的写探针在 basePath(默认 "/")上创建 `.scriptcat-verify-*`,
坚果云等不允许根目录写入的 WebDAV 服务会直接拒绝,导致备份/同步流程
在 FileSystemFactory.create 阶段就失败。

写权限不在 verify 阶段探测——不同 basePath 写策略不同,verify 没有
目标子路径上下文;真正的写操作会在 backupToCloud / buildFileSystem 中
由 createDir("ScriptCat") 立即触发并报错,凭据问题不会被静默吞掉。

close #1444
@CodFrm CodFrm requested a review from cyfung1031 May 15, 2026 03:39
@CodFrm CodFrm added P0 🚑 需要紧急处理的内容 hotfix 需要尽快更新到扩展商店 labels May 15, 2026
Copy link
Copy Markdown
Collaborator

@cyfung1031 cyfung1031 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

在实际写入时报错,可以接受。没问题

@CodFrm CodFrm merged commit 59c135e into main May 15, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

hotfix 需要尽快更新到扩展商店 P0 🚑 需要紧急处理的内容

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] 脚本猫 Beta 1.4.0.1300同步备份到坚果云盘时,重复创建ScriptCat文件夹

2 participants