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