From e848638ea3554b15d3ccd19277926a0ccba4da93 Mon Sep 17 00:00:00 2001 From: helltab Date: Wed, 31 Jul 2024 16:30:20 +0800 Subject: [PATCH 1/3] =?UTF-8?q?#578=20fix(filename):=20=E6=9C=89=E4=BA=9B?= =?UTF-8?q?=20url=20=E4=B8=8D=E5=8C=85=E5=90=AB=E6=96=87=E4=BB=B6=E5=90=8D?= =?UTF-8?q?=EF=BC=8C=E4=B8=94=E6=98=AF=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90?= =?UTF-8?q?=E7=9A=84=EF=BC=8C=E4=B8=8D=E8=83=BD=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=EF=BC=8C=E5=9B=A0=E6=AD=A4=E5=9C=A8=E8=8E=B7=E5=8F=96=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=90=8D=E7=A7=B0=E7=9A=84=E6=97=B6=E5=80=99=E4=BC=9A?= =?UTF-8?q?=E5=87=BA=E9=94=99,=20=E5=A2=9E=E5=8A=A0=E9=A2=9D=E5=A4=96?= =?UTF-8?q?=E7=9A=84=20url=20=E5=93=8D=E5=BA=94=E5=A4=B4=E6=9D=A5=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=96=87=E4=BB=B6=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/keking/service/FileHandlerService.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/server/src/main/java/cn/keking/service/FileHandlerService.java b/server/src/main/java/cn/keking/service/FileHandlerService.java index 2444bc750..c74ea570f 100644 --- a/server/src/main/java/cn/keking/service/FileHandlerService.java +++ b/server/src/main/java/cn/keking/service/FileHandlerService.java @@ -34,6 +34,8 @@ import javax.servlet.http.HttpServletRequest; import java.awt.image.BufferedImage; import java.io.*; +import java.net.URL; +import java.net.URLConnection; import java.net.URLDecoder; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; @@ -496,6 +498,24 @@ public FileAttribute getFileAttribute(String url, HttpServletRequest req) { cacheFilePrefixName = originFileName.substring(0, originFileName.lastIndexOf(".")) + suffix + "."; //这里统一文件名处理 下面更具类型 各自添加后缀 } catch (Exception e) { logger.error("获取文件名后缀错误:", e); + try { + logger.info("尝试通过 Content-Disposition 获取后缀:", e); + URL obj = new URL(url); + URLConnection conn = obj.openConnection(); + String headerField = conn.getHeaderField("Content-Disposition"); + for (String s : headerField.split(";")) { + int idx = s.indexOf("filename"); + if (idx > -1) { + originFileName = s.substring(idx + 10, s.length() - 2); + cacheFilePrefixName = originFileName.substring(0, originFileName.lastIndexOf(".")) + suffix + "."; + isHtmlView = suffix.equalsIgnoreCase("xls") || suffix.equalsIgnoreCase("xlsx") || suffix.equalsIgnoreCase("csv") || suffix.equalsIgnoreCase("xlsm") || suffix.equalsIgnoreCase("xlt") || suffix.equalsIgnoreCase("xltm") || suffix.equalsIgnoreCase("et") || suffix.equalsIgnoreCase("ett") || suffix.equalsIgnoreCase("xlam"); + type = FileType.typeFromFileName(originFileName); + suffix = KkFileUtils.suffixFromFileName(originFileName); + break; + } + } + }catch (Exception ignore){} + // e.printStackTrace(); } String cacheFileName = this.getCacheFileName(type, originFileName, cacheFilePrefixName, isHtmlView, isCompressFile); From 9f7e775f56baef90bf8d2edb80fbbed98771f906 Mon Sep 17 00:00:00 2001 From: helltab Date: Wed, 31 Jul 2024 19:44:43 +0800 Subject: [PATCH 2/3] =?UTF-8?q?#578=20fix(filename):=20=E6=9C=89=E4=BA=9B?= =?UTF-8?q?=20url=20=E4=B8=8D=E5=8C=85=E5=90=AB=E6=96=87=E4=BB=B6=E5=90=8D?= =?UTF-8?q?=EF=BC=8C=E4=B8=94=E6=98=AF=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90?= =?UTF-8?q?=E7=9A=84=EF=BC=8C=E4=B8=8D=E8=83=BD=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=EF=BC=8C=E5=9B=A0=E6=AD=A4=E5=9C=A8=E8=8E=B7=E5=8F=96=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=90=8D=E7=A7=B0=E7=9A=84=E6=97=B6=E5=80=99=E4=BC=9A?= =?UTF-8?q?=E5=87=BA=E9=94=99,=20=E5=A2=9E=E5=8A=A0=E9=A2=9D=E5=A4=96?= =?UTF-8?q?=E7=9A=84=20url=20=E5=93=8D=E5=BA=94=E5=A4=B4=E6=9D=A5=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=96=87=E4=BB=B6=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/main/java/cn/keking/service/FileHandlerService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/cn/keking/service/FileHandlerService.java b/server/src/main/java/cn/keking/service/FileHandlerService.java index c74ea570f..388416943 100644 --- a/server/src/main/java/cn/keking/service/FileHandlerService.java +++ b/server/src/main/java/cn/keking/service/FileHandlerService.java @@ -506,7 +506,7 @@ public FileAttribute getFileAttribute(String url, HttpServletRequest req) { for (String s : headerField.split(";")) { int idx = s.indexOf("filename"); if (idx > -1) { - originFileName = s.substring(idx + 10, s.length() - 2); + originFileName = s.substring(idx + 10, s.length()-1).replaceAll("\"", ""); cacheFilePrefixName = originFileName.substring(0, originFileName.lastIndexOf(".")) + suffix + "."; isHtmlView = suffix.equalsIgnoreCase("xls") || suffix.equalsIgnoreCase("xlsx") || suffix.equalsIgnoreCase("csv") || suffix.equalsIgnoreCase("xlsm") || suffix.equalsIgnoreCase("xlt") || suffix.equalsIgnoreCase("xltm") || suffix.equalsIgnoreCase("et") || suffix.equalsIgnoreCase("ett") || suffix.equalsIgnoreCase("xlam"); type = FileType.typeFromFileName(originFileName); From 850d38065ad41ad778ee476803ec0aef1847c8fb Mon Sep 17 00:00:00 2001 From: helltab Date: Wed, 31 Jul 2024 19:49:04 +0800 Subject: [PATCH 3/3] =?UTF-8?q?#578=20fix(filename):=20=E6=9C=89=E4=BA=9B?= =?UTF-8?q?=20url=20=E4=B8=8D=E5=8C=85=E5=90=AB=E6=96=87=E4=BB=B6=E5=90=8D?= =?UTF-8?q?=EF=BC=8C=E4=B8=94=E6=98=AF=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90?= =?UTF-8?q?=E7=9A=84=EF=BC=8C=E4=B8=8D=E8=83=BD=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=EF=BC=8C=E5=9B=A0=E6=AD=A4=E5=9C=A8=E8=8E=B7=E5=8F=96=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=90=8D=E7=A7=B0=E7=9A=84=E6=97=B6=E5=80=99=E4=BC=9A?= =?UTF-8?q?=E5=87=BA=E9=94=99,=20=E5=A2=9E=E5=8A=A0=E9=A2=9D=E5=A4=96?= =?UTF-8?q?=E7=9A=84=20url=20=E5=93=8D=E5=BA=94=E5=A4=B4=E6=9D=A5=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=96=87=E4=BB=B6=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/main/java/cn/keking/service/FileHandlerService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/cn/keking/service/FileHandlerService.java b/server/src/main/java/cn/keking/service/FileHandlerService.java index 388416943..5862d6e4f 100644 --- a/server/src/main/java/cn/keking/service/FileHandlerService.java +++ b/server/src/main/java/cn/keking/service/FileHandlerService.java @@ -506,7 +506,8 @@ public FileAttribute getFileAttribute(String url, HttpServletRequest req) { for (String s : headerField.split(";")) { int idx = s.indexOf("filename"); if (idx > -1) { - originFileName = s.substring(idx + 10, s.length()-1).replaceAll("\"", ""); + s = s.replaceAll("[\"\\s]*", ""); + originFileName = s.substring(idx + 9); cacheFilePrefixName = originFileName.substring(0, originFileName.lastIndexOf(".")) + suffix + "."; isHtmlView = suffix.equalsIgnoreCase("xls") || suffix.equalsIgnoreCase("xlsx") || suffix.equalsIgnoreCase("csv") || suffix.equalsIgnoreCase("xlsm") || suffix.equalsIgnoreCase("xlt") || suffix.equalsIgnoreCase("xltm") || suffix.equalsIgnoreCase("et") || suffix.equalsIgnoreCase("ett") || suffix.equalsIgnoreCase("xlam"); type = FileType.typeFromFileName(originFileName);