From 38a9c142e26edffd5238d1da7e3c165c70c81064 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=9B=84?= Date: Mon, 29 Dec 2025 10:20:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BC=96=E7=A0=81=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/keking/service/FileHandlerService.java | 18 ++++++++++-------- .../main/java/cn/keking/utils/WebUtils.java | 9 ++++----- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/server/src/main/java/cn/keking/service/FileHandlerService.java b/server/src/main/java/cn/keking/service/FileHandlerService.java index 95c389fc..08d4f02f 100644 --- a/server/src/main/java/cn/keking/service/FileHandlerService.java +++ b/server/src/main/java/cn/keking/service/FileHandlerService.java @@ -199,14 +199,16 @@ public class FileHandlerService implements InitializingBean { String baseUrl = BaseUrlFilter.getBaseUrl(); pdfFilePath = pdfFilePath.replace(fileDir, ""); String pdfFolder = pdfFilePath.substring(0, pdfFilePath.length() - 4); - String urlPrefix; - try { - urlPrefix = baseUrl + URLEncoder.encode(pdfFolder, uriEncoding).replaceAll("\\+", "%20"); - } catch (UnsupportedEncodingException e) { - logger.error("UnsupportedEncodingException", e); - urlPrefix = baseUrl + pdfFolder; - } - return urlPrefix + "/" + index + PDF2JPG_IMAGE_FORMAT; + // 对整个路径进行编码,包括特殊字符 + String encodedPath = URLEncoder.encode(pdfFolder, StandardCharsets.UTF_8); + encodedPath = encodedPath + .replaceAll("%2F", "/") // 恢复斜杠 + .replaceAll("%5C", "/") // 恢复反斜杠 + .replaceAll("\\+", "%20"); // 空格处理 + // 构建URL:使用_作为分隔符(这是kkFileView压缩包预览的常见格式) + String url = baseUrl + encodedPath + "/" + index + PDF2JPG_IMAGE_FORMAT; + return url; + } /** diff --git a/server/src/main/java/cn/keking/utils/WebUtils.java b/server/src/main/java/cn/keking/utils/WebUtils.java index bb6e3b69..e9978d5f 100644 --- a/server/src/main/java/cn/keking/utils/WebUtils.java +++ b/server/src/main/java/cn/keking/utils/WebUtils.java @@ -61,11 +61,10 @@ public class WebUtils { * */ public static String encodeFileName(String name) { - try { - name = URLEncoder.encode(name, "UTF-8").replaceAll("\\+", "%20"); - } catch (UnsupportedEncodingException e) { - return null; - } + name = URLEncoder.encode(name, StandardCharsets.UTF_8) + .replaceAll("%2F", "/") // 恢复斜杠 + .replaceAll("%5C", "/") // 恢复反斜杠 + .replaceAll("\\+", "%20"); // 空格处理 return name; }