From 77632dba9fd91e42b0756b5b99b2b2015ca33c6c Mon Sep 17 00:00:00 2001 From: vito Date: Thu, 3 Aug 2023 14:13:41 +0800 Subject: [PATCH 1/2] =?UTF-8?q?REPORT-102243=20=E4=BF=AE=E5=A4=8D=E5=9B=BE?= =?UTF-8?q?=E8=A1=A8=E5=AF=8C=E6=96=87=E6=9C=AC=E7=BC=96=E8=BE=91=E5=99=A8?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=A0=B7=E5=BC=8F=E5=9B=BE=E6=A0=87?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/jxbrowser/MimeType.java | 11 +++++------ .../jxbrowser/NxInterceptRequestCallback.java | 14 ++++++++++---- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/jxbrowser/MimeType.java b/designer-base/src/main/java/com/fr/design/jxbrowser/MimeType.java index c843dfebde..654de0d729 100644 --- a/designer-base/src/main/java/com/fr/design/jxbrowser/MimeType.java +++ b/designer-base/src/main/java/com/fr/design/jxbrowser/MimeType.java @@ -83,21 +83,20 @@ public enum MimeType { * 如果没有,尝试使用 Files.probeContentType 检测 * 如果没有,默认返回 text/html * - * @param url url路径 + * @param resourcePath 资源路径 * @return MimeType */ - public static String parseMimeType(String url) { - if (StringUtils.isBlank(url)) { + public static String parseMimeType(String resourcePath) { + if (StringUtils.isBlank(resourcePath)) { return HTML.mimeType; } - String finalPath = url.split("\\?")[0]; Optional mimeType = Arrays.stream(values()) - .filter(type -> finalPath.endsWith(type.suffix)) + .filter(type -> resourcePath.endsWith(type.suffix)) .findFirst(); if (mimeType.isPresent()) { return mimeType.get().mimeType; } else { - return getFileMimeType(finalPath); + return getFileMimeType(resourcePath); } } diff --git a/designer-base/src/main/java/com/fr/design/jxbrowser/NxInterceptRequestCallback.java b/designer-base/src/main/java/com/fr/design/jxbrowser/NxInterceptRequestCallback.java index ada7b2fff8..58d45a61f2 100644 --- a/designer-base/src/main/java/com/fr/design/jxbrowser/NxInterceptRequestCallback.java +++ b/designer-base/src/main/java/com/fr/design/jxbrowser/NxInterceptRequestCallback.java @@ -20,6 +20,7 @@ import com.teamdev.jxbrowser.net.callback.InterceptUrlRequestCallback; import org.jetbrains.annotations.NotNull; import java.io.InputStream; +import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import java.util.Map; @@ -80,8 +81,9 @@ public class NxInterceptRequestCallback implements InterceptUrlRequestCallback { protected Optional generateFileProtocolUrlRequestJob(Params params, String path) { try { - InputStream inputStream = getResourceStream(path); - String mimeType = MimeType.parseMimeType(path); + String resourcePath = getResourcePath(path); + InputStream inputStream = getResourceStream(resourcePath); + String mimeType = MimeType.parseMimeType(resourcePath); byte[] bytes; if (isHtml(mimeType)) { String text = IOUtils.inputStream2String(inputStream, EncodeConstants.ENCODING_UTF_8); @@ -104,7 +106,11 @@ public class NxInterceptRequestCallback implements InterceptUrlRequestCallback { * @return 输入流 * @throws Exception IO异常 */ - private InputStream getResourceStream(String path) throws Exception { + private InputStream getResourceStream(String path) { + return IOUtils.readResource(path); + } + + private static String getResourcePath(String path) throws UnsupportedEncodingException { int index = path.indexOf("="); if (index > 0) { path = path.substring(index + 1); @@ -115,7 +121,7 @@ public class NxInterceptRequestCallback implements InterceptUrlRequestCallback { // 通过自定义协议之后的url会自动encode一些中文字符,这里做一个decode,否则会导致路径访问失败 path = URLDecoder.decode(path, StandardCharsets.UTF_8.name()); } - return IOUtils.readResource(path); + return path; } private boolean isHtml(String mimeType) { From 3a7fce0b20dcd86a7679fe898ff03b368905fa67 Mon Sep 17 00:00:00 2001 From: vito Date: Thu, 3 Aug 2023 15:24:49 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=97=A0jira=E4=BB=BB=E5=8A=A1=20=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/java/com/fr/design/jxbrowser/MimeTypeTest.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/designer-base/src/test/java/com/fr/design/jxbrowser/MimeTypeTest.java b/designer-base/src/test/java/com/fr/design/jxbrowser/MimeTypeTest.java index 6a5fcf7f42..abfdb6fcfd 100644 --- a/designer-base/src/test/java/com/fr/design/jxbrowser/MimeTypeTest.java +++ b/designer-base/src/test/java/com/fr/design/jxbrowser/MimeTypeTest.java @@ -13,9 +13,10 @@ public class MimeTypeTest { @Test public void getMimeType() { Assert.assertEquals("text/html", MimeType.parseMimeType("http://a.html")); - Assert.assertEquals("text/html", MimeType.parseMimeType("http://a.html?a=ji")); - Assert.assertEquals("text/html", MimeType.parseMimeType("http://a.xml?a=ji")); - Assert.assertEquals("image/jpeg", MimeType.parseMimeType("http://a.jpg?a=ji")); - Assert.assertEquals("image/jpeg", MimeType.parseMimeType("http://a.jpeg?a=ji")); + Assert.assertEquals("truetype", + MimeType.parseMimeType("emb://com/fr/web/ui/resources?path=/com/fr/web/ui/font/iconfont.ttf")); + Assert.assertEquals("font/woff", + MimeType.parseMimeType("http://a.html?path=com/fr/ui/a.woff")); + // 对资源来说不存在http://a.jpg?a=ji这种情况,之前多虑了 } } \ No newline at end of file