From 34cb89a6ea9c75cabeb257d6e2d90f562bc6e0db Mon Sep 17 00:00:00 2001 From: q Date: Fri, 23 Jan 2026 17:59:19 +0800 Subject: [PATCH] =?UTF-8?q?fix(LeTool):=20=E4=BF=AE=E5=A4=8D=E5=AD=90?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=20fileId=20URL=20=E7=BC=96=E7=A0=81=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在构建 parserUrl 时对 fileId 进行 URL 编码 - 避免 %2B 等特殊字符被前端 axios 自动解码导致请求失败 - 添加异常处理和降级方案 --- .../main/java/cn/qaiu/parser/impl/LeTool.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/parser/src/main/java/cn/qaiu/parser/impl/LeTool.java b/parser/src/main/java/cn/qaiu/parser/impl/LeTool.java index 52c7516..8c783a3 100644 --- a/parser/src/main/java/cn/qaiu/parser/impl/LeTool.java +++ b/parser/src/main/java/cn/qaiu/parser/impl/LeTool.java @@ -10,6 +10,8 @@ import io.vertx.core.Promise; import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.Base64; import java.util.List; @@ -202,12 +204,21 @@ public class LeTool extends PanBase { fileInfo.setFileType("folder"); fileInfo.setSize(0L); fileInfo.setSizeStr("0B"); - // 设置目录解析的URL - 注意:从API返回的fileId已经是URL编码的,直接使用 - // 不需要再次编码,避免双重编码导致解析失败 - fileInfo.setParserUrl(String.format("%s/v2/getFileList?url=%s&dirId=%s", - getDomainName(), - shareLinkInfo.getShareUrl(), - fileId)); + // 设置目录解析的URL - fileId 需要进行 URL 编码以保持特殊字符的编码状态 + try { + String encodedFileId = URLEncoder.encode(fileId, "UTF-8"); + fileInfo.setParserUrl(String.format("%s/v2/getFileList?url=%s&dirId=%s", + getDomainName(), + shareLinkInfo.getShareUrl(), + encodedFileId)); + } catch (UnsupportedEncodingException e) { + log.error("URL编码失败: {}", e.getMessage()); + // 降级方案:直接使用原始 fileId + fileInfo.setParserUrl(String.format("%s/v2/getFileList?url=%s&dirId=%s", + getDomainName(), + shareLinkInfo.getShareUrl(), + fileId)); + } } else { // 文件类型 fileInfo.setFileType(fileType != null ? String.valueOf(fileType) : DEFAULT_FILE_TYPE);