diff --git a/CHANGELOG.md b/CHANGELOG.md index edf6011ad..46dae6fc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,8 @@ * 【poi 】 解决sax读取时,POI-5.2.x兼容性问题 * 【core 】 修复判断两段时间区间交集问题(pr#2210@Github) * 【http 】 修复标签误删问题(issue#I4Z7BV@Gitee) +* 【core 】 修复Win下文件名带*问题(pr#584@Gitee) +* 【core 】 FileUtil.getMimeType增加rar、7z支持(issue#I4ZBN0@Gitee) ------------------------------------------------------------------------------------------------------------- # 5.7.22 (2022-03-01) diff --git a/hutool-core/src/main/java/cn/hutool/core/compress/ZipReader.java b/hutool-core/src/main/java/cn/hutool/core/compress/ZipReader.java index 7ba843c2d..54520e9a7 100755 --- a/hutool-core/src/main/java/cn/hutool/core/compress/ZipReader.java +++ b/hutool-core/src/main/java/cn/hutool/core/compress/ZipReader.java @@ -30,22 +30,22 @@ public class ZipReader implements Closeable { private ZipInputStream in; /** - * 创建{@link ZipReader} + * 创建ZipReader * * @param zipFile 生成的Zip文件 * @param charset 编码 - * @return {@link ZipReader} + * @return ZipReader */ public static ZipReader of(File zipFile, Charset charset) { return new ZipReader(zipFile, charset); } /** - * 创建{@link ZipReader} + * 创建ZipReader * * @param in Zip输入的流,一般为输入文件流 * @param charset 编码 - * @return {@link ZipReader} + * @return ZipReader */ public static ZipReader of(InputStream in, Charset charset) { return new ZipReader(in, charset); @@ -108,7 +108,7 @@ public class ZipReader implements Closeable { this.in.reset(); ZipEntry zipEntry; while (null != (zipEntry = in.getNextEntry())) { - if(zipEntry.getName().equals(path)){ + if (zipEntry.getName().equals(path)) { return this.in; } } @@ -145,7 +145,7 @@ public class ZipReader implements Closeable { if (null == entryFilter || entryFilter.accept(zipEntry)) { //gitee issue #I4ZDQI String path = zipEntry.getName(); - if (System.getProperty("os.name").toLowerCase().startsWith("win")) { + if (FileUtil.isWindows()) { path = StrUtil.replace(zipEntry.getName(), "*", "_"); } // FileUtil.file会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/ diff --git a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java index 8cd3356f4..5ff787ba8 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java @@ -3441,10 +3441,14 @@ public class FileUtil extends PathUtil { String contentType = URLConnection.getFileNameMap().getContentTypeFor(filePath); if (null == contentType) { // 补充一些常用的mimeType - if (filePath.endsWith(".css")) { + if (StrUtil.endWithIgnoreCase(filePath, ".css")) { contentType = "text/css"; - } else if (filePath.endsWith(".js")) { + } else if (StrUtil.endWithIgnoreCase(filePath, ".js")) { contentType = "application/x-javascript"; + } else if (StrUtil.endWithIgnoreCase(filePath, ".rar")) { + contentType = "application/x-rar-compressed"; + } else if (StrUtil.endWithIgnoreCase(filePath, ".7z")) { + contentType = "application/x-7z-compressed"; } } diff --git a/hutool-core/src/test/java/cn/hutool/core/io/file/PathUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/io/file/PathUtilTest.java index 5e9e79ba7..9019d86f5 100644 --- a/hutool-core/src/test/java/cn/hutool/core/io/file/PathUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/file/PathUtilTest.java @@ -1,5 +1,6 @@ package cn.hutool.core.io.file; +import cn.hutool.core.io.FileUtil; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; @@ -65,4 +66,16 @@ public class PathUtilTest { mimeType = PathUtil.getMimeType(Paths.get("d:/test/test.mov")); Assert.assertEquals("video/quicktime", mimeType); } + + @Test + public void getMimeOfRarTest(){ + String contentType = FileUtil.getMimeType("a001.rar"); + Assert.assertEquals("application/x-rar-compressed", contentType); + } + + @Test + public void getMimeOf7zTest(){ + String contentType = FileUtil.getMimeType("a001.7z"); + Assert.assertEquals("application/x-7z-compressed", contentType); + } }