|
@@ -17,6 +17,7 @@ import javax.servlet.http.HttpServletResponse;
|
|
import java.io.*;
|
|
import java.io.*;
|
|
import java.math.BigInteger;
|
|
import java.math.BigInteger;
|
|
import java.net.URLEncoder;
|
|
import java.net.URLEncoder;
|
|
|
|
+import java.nio.charset.Charset;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.nio.file.Path;
|
|
@@ -27,6 +28,7 @@ import java.util.List;
|
|
import java.util.UUID;
|
|
import java.util.UUID;
|
|
import java.util.stream.Stream;
|
|
import java.util.stream.Stream;
|
|
import java.util.zip.ZipEntry;
|
|
import java.util.zip.ZipEntry;
|
|
|
|
+import java.util.zip.ZipInputStream;
|
|
import java.util.zip.ZipOutputStream;
|
|
import java.util.zip.ZipOutputStream;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -444,4 +446,61 @@ public class FileUtils extends org.apache.commons.io.FileUtils
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 解压
|
|
|
|
+ *
|
|
|
|
+ * @param inputStream zip压缩文件
|
|
|
|
+ * @param descDir 指定的解压目录
|
|
|
|
+ */
|
|
|
|
+ public static void unzipWithStream(InputStream inputStream, String descDir) {
|
|
|
|
+ if (!descDir.endsWith(File.separator)) {
|
|
|
|
+ descDir = descDir + File.separator;
|
|
|
|
+ }
|
|
|
|
+ try (ZipInputStream zipInputStream = new ZipInputStream(inputStream, Charset.forName("GBK"))) {
|
|
|
|
+ ZipEntry zipEntry;
|
|
|
|
+ while ((zipEntry = zipInputStream.getNextEntry()) != null) {
|
|
|
|
+ String zipEntryNameStr = zipEntry.getName();
|
|
|
|
+ String zipEntryName = zipEntryNameStr;
|
|
|
|
+ if (zipEntryNameStr.contains("/")) {
|
|
|
|
+ String str1 = zipEntryNameStr.substring(0, zipEntryNameStr.indexOf("/"));
|
|
|
|
+ zipEntryName = zipEntryNameStr.substring(str1.length() + 1);
|
|
|
|
+ }
|
|
|
|
+ String outPath = (descDir + zipEntryName).replace("\\\\", "/");
|
|
|
|
+ File outFile = new File(outPath.substring(0, outPath.lastIndexOf('/')));
|
|
|
|
+ if (!outFile.exists()) {
|
|
|
|
+ outFile.mkdirs();
|
|
|
|
+ }
|
|
|
|
+ if (new File(outPath).isDirectory()) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ writeFile(outPath, zipInputStream);
|
|
|
|
+ zipInputStream.closeEntry();
|
|
|
|
+ }
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ throw new CustomException("压缩包处理异常,异常信息{}"+ e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //将流写到文件中
|
|
|
|
+ public static void writeFile(String filePath, ZipInputStream zipInputStream) {
|
|
|
|
+ File file = new File(filePath);
|
|
|
|
+ File directory = file.getParentFile();
|
|
|
|
+ if (!directory.exists()){
|
|
|
|
+ directory.mkdirs();
|
|
|
|
+ }
|
|
|
|
+ try (OutputStream outputStream = new FileOutputStream(filePath)) {
|
|
|
|
+ byte[] bytes = new byte[4096];
|
|
|
|
+ int len;
|
|
|
|
+ while ((len = zipInputStream.read(bytes)) != -1) {
|
|
|
|
+ outputStream.write(bytes, 0, len);
|
|
|
|
+ }
|
|
|
|
+ } catch (IOException ex) {
|
|
|
|
+ ex.printStackTrace();
|
|
|
|
+ throw new CustomException("解压文件时,写出到文件出错!");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|