From 36d3d5d57ad24eecb09b7891e5dbd0d19977d82d Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期六, 22 七月 2023 15:57:44 +0800
Subject: [PATCH] 解决zip文件解压时遇到文件先于目录解压错误

---
 src/main/java/com/lf/server/helper/ZipHelper.java                        |   74 +++++++++++++++++++++++++------------
 src/main/java/com/lf/server/helper/PathHelper.java                       |    2 
 src/main/java/com/lf/server/entity/all/StaticData.java                   |    2 
 src/main/java/com/lf/server/controller/data/upload/UploadController.java |    4 +-
 4 files changed, 54 insertions(+), 28 deletions(-)

diff --git a/src/main/java/com/lf/server/controller/data/upload/UploadController.java b/src/main/java/com/lf/server/controller/data/upload/UploadController.java
index 0b41714..2c3700c 100644
--- a/src/main/java/com/lf/server/controller/data/upload/UploadController.java
+++ b/src/main/java/com/lf/server/controller/data/upload/UploadController.java
@@ -161,8 +161,8 @@
     @SysLog()
     @ApiOperation(value = "鏌ヨ鏄犲皠")
     @ApiImplicitParams({
-            @ApiImplicitParam(name = "path", value = "璺緞", dataType = "String", paramType = "query", example = "20230110010101"),
-            @ApiImplicitParam(name = "dirid", value = "鐩綍ID", dataType = "Integer", paramType = "query", example = "163"),
+            @ApiImplicitParam(name = "path", value = "璺緞", dataType = "String", paramType = "query", example = "20230722"),
+            @ApiImplicitParam(name = "dirid", value = "鐩綍ID", dataType = "Integer", paramType = "query", example = "1"),
             @ApiImplicitParam(name = "verid", value = "鐗堟湰ID", dataType = "Integer", paramType = "query", example = "0"),
             @ApiImplicitParam(name = "epsgCode", value = "鍧愭爣缂栫爜", dataType = "String", paramType = "query", example = "EPSG:4490")
     })
diff --git a/src/main/java/com/lf/server/entity/all/StaticData.java b/src/main/java/com/lf/server/entity/all/StaticData.java
index 6e8bb7d..c085077 100644
--- a/src/main/java/com/lf/server/entity/all/StaticData.java
+++ b/src/main/java/com/lf/server/entity/all/StaticData.java
@@ -30,7 +30,7 @@
 
     public final static int ONE_HUNDRED_THOUSAND = 100000;
 
-    public static final double D75 = 75.0;
+    public static final double D90 = 90.0;
 
     public static final double D100 = 100.0;
 
diff --git a/src/main/java/com/lf/server/helper/PathHelper.java b/src/main/java/com/lf/server/helper/PathHelper.java
index 3575049..da3c85d 100644
--- a/src/main/java/com/lf/server/helper/PathHelper.java
+++ b/src/main/java/com/lf/server/helper/PathHelper.java
@@ -141,7 +141,7 @@
     public void deleteOldPath(String tempPath) {
         try {
             double ran = Math.random() * 99;
-            if (ran < StaticData.D75) {
+            if (ran < StaticData.D90) {
                 return;
             }
 
diff --git a/src/main/java/com/lf/server/helper/ZipHelper.java b/src/main/java/com/lf/server/helper/ZipHelper.java
index f03db12..42ddd86 100644
--- a/src/main/java/com/lf/server/helper/ZipHelper.java
+++ b/src/main/java/com/lf/server/helper/ZipHelper.java
@@ -36,31 +36,9 @@
                 dir.mkdirs();
             }
 
-            int count;
             zipFile = new ZipFile(filePath, Charset.forName("GBK"));
-            Enumeration e = zipFile.entries();
-            while (e.hasMoreElements()) {
-                ZipEntry entry = (ZipEntry) e.nextElement();
-                if (entry.isDirectory()) {
-                    File f = new File(zipDir + File.separator + entry.getName());
-                    if (!f.exists()) {
-                        f.mkdirs();
-                    }
-                    continue;
-                }
-
-                BufferedInputStream is = new BufferedInputStream(zipFile.getInputStream(entry));
-                FileOutputStream fos = new FileOutputStream(zipDir + File.separator + entry.getName());
-                BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER_SIZE);
-                while ((count = is.read(BUFFER, 0, BUFFER_SIZE)) != -1) {
-                    dest.write(BUFFER, 0, count);
-                }
-
-                dest.flush();
-                dest.close();
-                fos.close();
-                is.close();
-            }
+            createDirs(zipFile, zipDir);
+            writeFiles(zipFile, zipDir);
 
             return true;
         } catch (Exception ex) {
@@ -78,6 +56,54 @@
     }
 
     /**
+     * 鍒涘缓鐩綍
+     */
+    private static void createDirs(ZipFile zipFile, String zipDir) {
+        Enumeration<?> e = zipFile.entries();
+        while (e.hasMoreElements()) {
+            ZipEntry entry = (ZipEntry) e.nextElement();
+            if (entry.isDirectory()) {
+                File f = new File(zipDir + File.separator + entry.getName());
+                if (!f.exists()) {
+                    f.mkdirs();
+                }
+            }
+        }
+    }
+
+    /**
+     * 鍐欐枃浠�
+     */
+    private static void writeFiles(ZipFile zipFile, String zipDir) throws IOException {
+        Enumeration<?> e = zipFile.entries();
+        while (e.hasMoreElements()) {
+            ZipEntry entry = (ZipEntry) e.nextElement();
+            if (!entry.isDirectory()) {
+                writeFile(zipFile, entry, zipDir);
+            }
+        }
+    }
+
+    /**
+     * 鍐欐枃浠�
+     */
+    private static void writeFile(ZipFile zipFile, ZipEntry entry, String zipDir) throws IOException {
+        int count;
+
+        BufferedInputStream is = new BufferedInputStream(zipFile.getInputStream(entry));
+        FileOutputStream fos = new FileOutputStream(zipDir + File.separator + entry.getName());
+        BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER_SIZE);
+        while ((count = is.read(BUFFER, 0, BUFFER_SIZE)) != -1) {
+            dest.write(BUFFER, 0, count);
+        }
+
+        dest.flush();
+        dest.close();
+        fos.close();
+        is.close();
+    }
+
+    /**
      * Zip鍘嬬缉
      *
      * @param zipFile   zip婧愭枃浠�

--
Gitblit v1.9.3