From a7a50f8d0ac1e3168cf8a8004907a44d438f6f2c Mon Sep 17 00:00:00 2001 From: noelorin Date: Sun, 27 Sep 2026 16:43:35 +0800 Subject: [PATCH] fix(mount): stop double-encoding WebDAV paths webdav lib encodePath already percent-encodes; our encodeURIComponent produced %25 and 400 on CJK/space paths. --- packages/trpc/src/services/mount.service.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/trpc/src/services/mount.service.ts b/packages/trpc/src/services/mount.service.ts index 3095a72..b8e141f 100644 --- a/packages/trpc/src/services/mount.service.ts +++ b/packages/trpc/src/services/mount.service.ts @@ -231,10 +231,13 @@ function describeWebdavError(e: unknown, path?: string): string { return `连接失败:${short}`; } -/** WebDAV 路径:补前导 /、去重斜杠、段级百分号编码(中文/空格) */ +/** + * WebDAV 路径:只做斜杠规范化。 + * 不要 encodeURIComponent —— webdav 库内部 encodePath 会再编码一次, + * 双重编码(% → %25)会导致服务器 400 Bad Request。 + */ function normalizeWebdavPath(input: string): string { - const trimmed = input.trim() || "/"; + const trimmed = (input || "/").trim().replace(/\\/g, "/"); const parts = trimmed.split("/").filter(Boolean); - const encoded = parts.map((seg) => encodeURIComponent(decodeURIComponent(seg))); - return `/${encoded.join("/")}`; + return parts.length ? `/${parts.join("/")}` : "/"; }