diff --git a/server/src/main/java/cn/keking/service/FileHandlerService.java b/server/src/main/java/cn/keking/service/FileHandlerService.java index d8ba3122..b0901301 100644 --- a/server/src/main/java/cn/keking/service/FileHandlerService.java +++ b/server/src/main/java/cn/keking/service/FileHandlerService.java @@ -273,6 +273,7 @@ public class FileHandlerService { attribute.setType(type); attribute.setName(fileName); attribute.setSuffix(suffix); + url = WebUtils.encodeUrlFileName(url); attribute.setUrl(url); if (req != null) { String officePreviewType = req.getParameter("officePreviewType"); diff --git a/server/src/main/java/cn/keking/utils/WebUtils.java b/server/src/main/java/cn/keking/utils/WebUtils.java index ec67f0b9..c978e59c 100644 --- a/server/src/main/java/cn/keking/utils/WebUtils.java +++ b/server/src/main/java/cn/keking/utils/WebUtils.java @@ -2,8 +2,10 @@ package cn.keking.utils; import io.mola.galimatias.GalimatiasParseException; +import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; +import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; @@ -97,4 +99,23 @@ public class WebUtils { String fileName = nonPramStr.substring(nonPramStr.lastIndexOf("/") + 1); return KkFileUtils.suffixFromFileName(fileName); } + + /** + * 对url中的文件名进行UTF-8编码 + * + * @param url url + * @return 文件名编码后的url + */ + public static String encodeUrlFileName(String url) { + 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) { + return null; + } + return url.substring(0, fileNameStartIndex) + encodedFileName + url.substring(fileNameEndIndex); + } }