From ba7b6eed4a2aa30be7d7426cbc9dabe3d390e64a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=B2=BE=E5=8D=8E?= <842761733@qq.com> Date: Thu, 10 Mar 2022 09:47:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BD=BF=E7=94=A8http?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=B5=81=E4=B8=8B=E8=BD=BD=E6=97=B6=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=90=8D=E7=BC=96=E7=A0=81=E5=BC=82=E5=B8=B8Gitee-#I4?= =?UTF-8?q?W0TQ?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/main/java/cn/keking/utils/WebUtils.java | 14 +++++++++++++- .../test/java/cn/keking/utils/WebUtilsTests.java | 8 ++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/cn/keking/utils/WebUtils.java b/server/src/main/java/cn/keking/utils/WebUtils.java index 58ed678c..b2bce0b3 100644 --- a/server/src/main/java/cn/keking/utils/WebUtils.java +++ b/server/src/main/java/cn/keking/utils/WebUtils.java @@ -115,10 +115,22 @@ public class WebUtils { * @return 文件名编码后的url */ public static String encodeUrlFileName(String url) { + String encodedFileName; + String fullFileName = WebUtils.getUrlParameterReg(url, "fullfilename"); + if (fullFileName != null && fullFileName.length() > 0) { + try { + encodedFileName = URLEncoder.encode(fullFileName, "UTF-8"); + } catch (UnsupportedEncodingException e) { + return null; + } + String noQueryUrl = url.substring(0, url.indexOf("?")); + String parameterStr = url.substring(url.indexOf("?")); + parameterStr = parameterStr.replaceFirst(fullFileName, encodedFileName); + return noQueryUrl + parameterStr; + } String noQueryUrl = url.substring(0, url.contains("?") ? url.indexOf("?") : url.length()); int fileNameStartIndex = noQueryUrl.lastIndexOf('/') + 1; int fileNameEndIndex = noQueryUrl.lastIndexOf('.'); - String encodedFileName; try { encodedFileName = URLEncoder.encode(noQueryUrl.substring(fileNameStartIndex, fileNameEndIndex), "UTF-8"); } catch (UnsupportedEncodingException e) { diff --git a/server/src/test/java/cn/keking/utils/WebUtilsTests.java b/server/src/test/java/cn/keking/utils/WebUtilsTests.java index 59107cd1..3ab7e1c1 100644 --- a/server/src/test/java/cn/keking/utils/WebUtilsTests.java +++ b/server/src/test/java/cn/keking/utils/WebUtilsTests.java @@ -21,4 +21,12 @@ public class WebUtilsTests { String out = "https://file.keking.cn/demo/%23hello%26world.txt?param0=0¶m1=1"; assert WebUtils.encodeUrlFileName(in).equals(out); } + + @Test + void encodeUrlFullFileNameTestWithParams() { + // 测试对URL中使用fullfilename参数的文件名部分进行UTF-8编码 + String in = "https://file.keking.cn/demo/download?param0=0&fullfilename=hello#0.txt"; + String out = "https://file.keking.cn/demo/download?param0=0&fullfilename=hello%230.txt"; + assert WebUtils.encodeUrlFileName(in).equals(out); + } }