diff --git a/o2server/pom.xml b/o2server/pom.xml
index 3f3ecf53de048f9ad6133e056189f7bf309040b5..a5b8d8cbab1fb0a9efd49a119903d4e24554dd18 100644
--- a/o2server/pom.xml
+++ b/o2server/pom.xml
@@ -294,7 +294,7 @@
com.squareup
javapoet
-
com.github.neuroph
@@ -348,6 +348,10 @@
javax.activation
activation
+
+ net.lingala.zip4j
+ zip4j
+
@@ -785,7 +789,7 @@
javapoet
1.11.1
-
com.github.neuroph
@@ -1002,6 +1006,11 @@
x_workschedu_core_entity
5.3
+
+ net.lingala.zip4j
+ zip4j
+ 2.3.2
+
diff --git a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/ZipTools.java b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/ZipTools.java
new file mode 100644
index 0000000000000000000000000000000000000000..59574df9e21f661eddd6527faaba7996f11268e1
--- /dev/null
+++ b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/ZipTools.java
@@ -0,0 +1,76 @@
+package com.x.base.core.project.tools;
+
+import net.lingala.zip4j.ZipFile;
+import net.lingala.zip4j.model.ExtraDataRecord;
+import net.lingala.zip4j.model.FileHeader;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.File;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.util.List;
+
+public class ZipTools {
+ public static void unZip(File source, List subs, File dist, boolean asNew, Charset charset) {
+ try{
+ ZipFile zipFile = new ZipFile(source);
+ if(charset == null){
+ charset = DefaultCharset.charset;
+ }
+ zipFile.setCharset(charset);
+ List fileHeaderList = zipFile.getFileHeaders();
+ for (FileHeader fileHeader : fileHeaderList){
+ if(isFromExtraData(fileHeader) && DefaultCharset.charset.name() == charset.name()){
+ unZip(source, subs, dist, asNew, DefaultCharset.charset_gbk);
+ return;
+ }
+ String name = fileHeader.getFileName();
+ //System.out.println(name);
+ if (name.length() < 2) {
+ continue;
+ }
+ if (subs != null) {
+ boolean flag = false;
+ for (String sub : subs) {
+ if (StringUtils.startsWith(name, sub)) {
+ flag = true;
+ break;
+ }
+ }
+ if (flag) {
+ continue;
+ }
+ }
+ if (fileHeader.isDirectory()) {
+ File dir = new File(dist, name);
+ if (dir.exists() && name.indexOf("/") == name.lastIndexOf("/") && asNew) {
+ FileUtils.cleanDirectory(dir);
+ }
+ FileUtils.forceMkdir(dir);
+ } else {
+ zipFile.extractFile(fileHeader, dist.getAbsolutePath());
+ }
+ }
+ fileHeaderList.clear();
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ public static boolean isFromExtraData(FileHeader fileHeader) {
+ if(fileHeader.getExtraDataRecords()!=null){
+ for (ExtraDataRecord extraDataRecord : fileHeader.getExtraDataRecords()) {
+ long identifier = extraDataRecord.getHeader();
+ if (identifier == 0x7075) {
+ byte[] bytes = extraDataRecord.getData();
+ ByteBuffer buffer = ByteBuffer.wrap(bytes);
+ byte version = buffer.get();
+ assert (version == 1);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+}
diff --git a/o2server/x_console/src/main/java/com/x/server/console/NodeAgent.java b/o2server/x_console/src/main/java/com/x/server/console/NodeAgent.java
index 95cd13183103e44e24d97a0a9a0fbd8e252f49ef..4d5b2684573ce6dc6cf972d6025db1d50593641d 100644
--- a/o2server/x_console/src/main/java/com/x/server/console/NodeAgent.java
+++ b/o2server/x_console/src/main/java/com/x/server/console/NodeAgent.java
@@ -378,7 +378,7 @@ public class NodeAgent extends Thread {
FileTools.forceMkdir(dist);
}
List subs = new ArrayList<>();
- JarTools.unjar(zipFile, subs, dist, asNew);
+ ZipTools.unZip(zipFile, subs, dist, asNew, null);
FileUtils.cleanDirectory(tempFile);
logger.print("upload resource {} success!", fileName);
@@ -655,7 +655,7 @@ public class NodeAgent extends Thread {
FileUtils.writeByteArrayToFile(zipFile, bytes);
File dist = Config.dir_custom(true);
List subs = new ArrayList<>();
- JarTools.unjar(zipFile, subs, dist, false);
+ ZipTools.unZip(zipFile, subs, dist, false, null);
FileUtils.cleanDirectory(tempFile);