From 60b91eb79f74ab1b9cad0c12f42ad5200167e539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=9B=84?= Date: Sat, 8 Apr 2023 05:44:52 +0000 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=8E=8B=E7=BC=A9=E5=8C=85=E5=AF=86=E7=A0=81=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=8E=8B=E7=BC=A9=E5=8C=85LINUX=E4=B8=8B=E4=B8=AD?= =?UTF-8?q?=E6=96=87=E4=B9=B1=E7=A0=81=20=E8=A7=A3=E5=8E=8B=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=96=87=E4=BB=B6=E7=9B=AE=E5=BD=95=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=20=E6=94=AF=E6=8C=81=E5=8E=8B=E7=BC=A9=E5=8C=85?= =?UTF-8?q?=E5=AF=86=E7=A0=81=20=E4=BF=AE=E5=A4=8D=E5=8E=8B=E7=BC=A9?= =?UTF-8?q?=E5=8C=85LINUX=E4=B8=8B=E4=B8=AD=E6=96=87=E4=B9=B1=E7=A0=81=20?= =?UTF-8?q?=E8=A7=A3=E5=8E=8B=E6=94=AF=E6=8C=81=E6=96=87=E4=BB=B6=E7=9B=AE?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 高雄 --- .../cn/keking/service/CompressFileReader.java | 130 ++---------------- 1 file changed, 8 insertions(+), 122 deletions(-) diff --git a/server/src/main/java/cn/keking/service/CompressFileReader.java b/server/src/main/java/cn/keking/service/CompressFileReader.java index f8578ead..c8226942 100644 --- a/server/src/main/java/cn/keking/service/CompressFileReader.java +++ b/server/src/main/java/cn/keking/service/CompressFileReader.java @@ -1,6 +1,8 @@ package cn.keking.service; + import cn.keking.config.ConfigConstants; import cn.keking.model.FileType; +import cn.keking.utils.RarUtils; import cn.keking.web.filter.BaseUrlFilter; import net.sf.sevenzipjbinding.ExtractOperationResult; import net.sf.sevenzipjbinding.IInArchive; @@ -13,12 +15,9 @@ import org.apache.commons.io.IOUtils; import org.springframework.stereotype.Component; import java.io.*; -import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; /** * @author yudian-it @@ -30,88 +29,7 @@ public class CompressFileReader { public CompressFileReader(FileHandlerService fileHandlerService) { this.fileHandlerService = fileHandlerService; } - private static final String fileDir = ConfigConstants.getFileDir(); - public static byte[] getUTF8BytesFromGBKString(String gbkStr) { - int n = gbkStr.length(); - byte[] utfBytes = new byte[3 * n]; - int k = 0; - for (int i = 0; i < n; i++) { - int m = gbkStr.charAt(i); - if (m < 128 && m >= 0) { - utfBytes[k++] = (byte) m; - continue; - } - utfBytes[k++] = (byte) (0xe0 | (m >> 12)); - utfBytes[k++] = (byte) (0x80 | ((m >> 6) & 0x3f)); - utfBytes[k++] = (byte) (0x80 | (m & 0x3f)); - } - if (k < utfBytes.length) { - byte[] tmp = new byte[k]; - System.arraycopy(utfBytes, 0, tmp, 0, k); - return tmp; - } - return utfBytes; - } - - public String getUtf8String(String str) { - if (str != null && str.length() > 0) { - String needEncodeCode = "ISO-8859-1"; - String neeEncodeCode = "ISO-8859-2"; - String gbkEncodeCode = "GBK"; - try { - if (Charset.forName(needEncodeCode).newEncoder().canEncode(str)) { - str = new String(str.getBytes(needEncodeCode), StandardCharsets.UTF_8); - } - if (Charset.forName(neeEncodeCode).newEncoder().canEncode(str)) { - str = new String(str.getBytes(neeEncodeCode), StandardCharsets.UTF_8); - } - if (Charset.forName(gbkEncodeCode).newEncoder().canEncode(str)) { - str = new String(getUTF8BytesFromGBKString(str), StandardCharsets.UTF_8); - } - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - } - return str; - } - /** - * 判断是否是中日韩文字 - */ - private static boolean isChinese(char c) { - Character.UnicodeBlock ub = Character.UnicodeBlock.of(c); - return ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS - || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS - || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A - || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION - || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION - || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS; - } - public static boolean judge(char c){ - return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'); - } - public static boolean isMessyCode(String strName) { - //去除字符串中的空格 制表符 换行 回车 - Pattern p = Pattern.compile("\\s*|\t*|\r*|\n*"); - Matcher m = p.matcher(strName); - String after = m.replaceAll("").replaceAll("\\+", "").replaceAll("#", "").replaceAll("&", ""); - //去除字符串中的标点符号 - String temp = after.replaceAll("\\p{P}", ""); - //处理之后转换成字符数组 - char[] ch = temp.trim().toCharArray(); - for (char c : ch) { - //判断是否是数字或者英文字符 - if (!judge(c)) { - //判断是否是中日韩文 - if (!isChinese(c)) { - //如果不是数字或者英文字符也不是中日韩文则表示是乱码返回true - return true; - } - } - } - //表示不是乱码 返回false - return false; - } - public String unRar(String paths, String passWord, String fileName) { + public String unRar(String paths, String passWord, String fileName) throws Exception { List imgUrls = new ArrayList<>(); String baseUrl = BaseUrlFilter.getBaseUrl(); String archiveFileName = fileHandlerService.getFileNameFromPath(paths); @@ -129,8 +47,8 @@ public class CompressFileReader { ExtractOperationResult result; result = item.extractSlow(data -> { try { - str[0] = getUtf8String(item.getPath()); - if (isMessyCode(str[0])){ + str[0] = RarUtils.getUtf8String(item.getPath()); + if (RarUtils.isMessyCode(str[0])){ str[0] = new String(item.getPath().getBytes(StandardCharsets.ISO_8859_1), "gbk"); } str[0] = str[0].replace("\\", File.separator); //Linux 下路径错误 @@ -155,17 +73,13 @@ public class CompressFileReader { } fileHandlerService.putImgCache(fileName, imgUrls); } else { - return "error"; + return null; } } } return archiveFileName + "_"; } catch (Exception e) { - String Str1 = String.valueOf(e); - if (Str1.contains("Password")) { - return "Password"; - } - return null; + throw new Exception(e); } finally { if (inArchive != null) { try { @@ -183,33 +97,5 @@ public class CompressFileReader { } } } - /** - * 读取文件目录树 - */ - public static List getTree(String rootPath) { - List nodes = new ArrayList<>(); - File file = new File(fileDir+rootPath); - ZtreeNodeVo node = traverse(file); - nodes.add(node); - return nodes; - } - private static ZtreeNodeVo traverse(File file) { - ZtreeNodeVo pathNodeVo = new ZtreeNodeVo(); - pathNodeVo.setId(file.getAbsolutePath().replace(fileDir, "").replace("\\", "/")); - pathNodeVo.setName(file.getName()); - pathNodeVo.setPid(file.getParent().replace(fileDir, "").replace("\\", "/")); - if (file.isDirectory()) { - List subNodeVos = new ArrayList<>(); - File[] subFiles = file.listFiles(); - if (subFiles == null) { - return pathNodeVo; - } - for (File subFile : subFiles) { - ZtreeNodeVo subNodeVo = traverse(subFile); - subNodeVos.add(subNodeVo); - } - pathNodeVo.setChildren(subNodeVos); - } - return pathNodeVo; - } + }