From 91434464be674f75793f08d95043974d2f34ae87 Mon Sep 17 00:00:00 2001 From: cying314 <79831449+cying314@users.noreply.github.com> Date: Fri, 23 Feb 2024 11:39:14 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix=20=E8=A7=A3=E5=86=B3=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E8=BD=AC=E4=B9=89=E5=AF=BC=E8=87=B4=E7=9A=84=E5=8E=8B=E7=BC=A9?= =?UTF-8?q?=E5=8C=85=E5=86=85=E6=96=87=E4=BB=B6=E9=A2=84=E8=A7=88=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/keking/service/FileHandlerService.java | 18 ++++++++++-------- server/src/main/resources/web/compress.ftl | 3 ++- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/server/src/main/java/cn/keking/service/FileHandlerService.java b/server/src/main/java/cn/keking/service/FileHandlerService.java index 13db88bb6..cb03992c4 100644 --- a/server/src/main/java/cn/keking/service/FileHandlerService.java +++ b/server/src/main/java/cn/keking/service/FileHandlerService.java @@ -204,13 +204,14 @@ private String getPdf2jpgUrl(String pdfFilePath, int index) { 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; - } + // 移除多余的转义(压缩包中的文件路径/会被转义,导致无法正常预览) + String urlPrefix = baseUrl + pdfFolder; + // 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; } @@ -468,7 +469,8 @@ public FileAttribute getFileAttribute(String url, HttpServletRequest req) { url = WebUtils.encodeUrlFileName(url); if (UrlEncoderUtils.hasUrlEncoded(originFileName)) { //判断文件名是否转义 try { - originFileName = URLDecoder.decode(originFileName, uriEncoding).replaceAll("\\+", "%20"); + // 无需转义+号,否则文件名包含+号将无法正常下载资源 + originFileName = URLDecoder.decode(originFileName, uriEncoding); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } diff --git a/server/src/main/resources/web/compress.ftl b/server/src/main/resources/web/compress.ftl index add1eb580..d657b1014 100644 --- a/server/src/main/resources/web/compress.ftl +++ b/server/src/main/resources/web/compress.ftl @@ -52,7 +52,8 @@ function chooseNode(event, treeId, treeNode) { if (!treeNode.isParent) { - var path = '${baseUrl}' + treeNode.id + "?kkCompressfileKey=" + '${fileTree}'; + // 转义特殊字符,解决压缩包内特殊文件名无法预览问题 + var path = '${baseUrl}' + treeNode.id.split("/").map(name=>encodeURIComponent(name)).join("/") + "?kkCompressfileKey=" + encodeURIComponent('${fileTree}'); location.href = "${baseUrl}onlinePreview?url=" + encodeURIComponent(Base64.encode(path)); } } From 8d51207b150d31dda1bcc211a7b15c8fb0c9c718 Mon Sep 17 00:00:00 2001 From: cying314 <79831449+cying314@users.noreply.github.com> Date: Fri, 23 Feb 2024 14:51:53 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix=20=E8=A7=A3=E5=86=B3=E5=8E=8B=E7=BC=A9?= =?UTF-8?q?=E5=8C=85=E5=86=85=E6=96=87=E4=BB=B6=E5=90=8D=E5=90=AB=3D?= =?UTF-8?q?=E5=8F=B7=E6=97=B6=E8=A7=A3=E5=8E=8B=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/main/java/cn/keking/utils/RarUtils.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/server/src/main/java/cn/keking/utils/RarUtils.java b/server/src/main/java/cn/keking/utils/RarUtils.java index a08c1ce6e..dfe343c07 100644 --- a/server/src/main/java/cn/keking/utils/RarUtils.java +++ b/server/src/main/java/cn/keking/utils/RarUtils.java @@ -76,14 +76,12 @@ public static boolean judge(char c){ return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'); } public static boolean isMessyCode(String strName) { - //去除字符串中的空格 制表符 换行 回车 - Pattern p = Pattern.compile("\\s*|\t*|\r*|\n*"); + //去除字符串中的空白字符 + # & = 标点符号 + Pattern p = Pattern.compile("\\s|\\+|#|&|=|\\p{P}"); Matcher m = p.matcher(strName); - String after = m.replaceAll("").replaceAll("\\+", "").replaceAll("#", "").replaceAll("&", ""); - //去除字符串中的标点符号 - String temp = after.replaceAll("\\p{P}", ""); + String after = m.replaceAll(""); //处理之后转换成字符数组 - char[] ch = temp.trim().toCharArray(); + char[] ch = after.trim().toCharArray(); for (char c : ch) { //判断是否是数字或者英文字符 if (!judge(c)) {