From b8f2c19b869986efa519f1846b63b11378147861 Mon Sep 17 00:00:00 2001
From: zrj <646384940@qq.com>
Date: Tue, 05 Nov 2024 22:11:27 +0800
Subject: [PATCH] 增加空间数据和基础接口及shp导入导出

---
 src/main/java/org/springblade/common/utils/ZipUtil.java |  142 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 138 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/springblade/common/utils/ZipUtil.java b/src/main/java/org/springblade/common/utils/ZipUtil.java
index 165ce93..eb9c1d3 100644
--- a/src/main/java/org/springblade/common/utils/ZipUtil.java
+++ b/src/main/java/org/springblade/common/utils/ZipUtil.java
@@ -1,8 +1,13 @@
 package org.springblade.common.utils;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.context.annotation.Configuration;
 
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.io.*;
+import java.net.URLEncoder;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Enumeration;
@@ -81,7 +86,12 @@
         return list;
     }
 
-    // 定义一个公共的静态方法zipFolder,用于压缩文件夹
+	/**
+	 * 压缩文件夹
+	 * @param sourceFolderPath 压缩文件路径
+	 * @param zipFilePath 压缩后包的路径
+	 * @return
+	 */
     public static boolean zipFolder(String sourceFolderPath, String zipFilePath) {
         File sourceFile = new File(sourceFolderPath);
         try (
@@ -96,8 +106,48 @@
         return false;
     }
 
-    // 将文件夹整体压缩
-    private static void zipFile(File fileToZip, String fileName, ZipOutputStream zos) throws IOException {
+	/**
+	 * 压缩文件夹
+	 * @param sourceFolderPath 压缩文件路径
+	 * @param zos zip输出流
+	 * @return
+	 */
+    public static boolean zipFolder(String sourceFolderPath,ZipOutputStream zos) {
+        File sourceFile = new File(sourceFolderPath);
+		try {
+			zipFile(sourceFile, sourceFile.getName(), zos);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}finally {
+			// 删除生成的文件
+			deleteDirectory(sourceFile);
+		}
+		return false;
+    }
+
+	/**
+	 * 删除文件夹下文件
+	 * @param directoryToBeDeleted
+	 * @return
+	 */
+	public static boolean deleteDirectory(File directoryToBeDeleted) {
+		File[] allContents = directoryToBeDeleted.listFiles();
+		if (allContents != null) {
+			for (File file : allContents) {
+				deleteDirectory(file);
+			}
+		}
+		return directoryToBeDeleted.delete();
+	}
+
+	/**
+	 * 将文件夹整体压缩
+	 * @param fileToZip
+	 * @param fileName 文件名称
+	 * @param zos
+	 * @throws IOException
+	 */
+	public static void zipFile(File fileToZip, String fileName, ZipOutputStream zos) throws IOException {
         if (fileToZip.isHidden()) {
             return;
         }
@@ -126,7 +176,91 @@
         fis.close();
     }
 
-    public static void main(String[] args) {
+	/**
+	 * 设置导出zip的响应格式
+	 *
+	 * @param request
+	 * @param response
+	 * @param fileZip  zip的名字
+	 * @param filePath zip的路径
+	 * @throws UnsupportedEncodingException
+	 */
+	public static void downLoadFile(HttpServletRequest request, HttpServletResponse response, String fileZip, String filePath) throws UnsupportedEncodingException {
+		//进行浏览器下载
+		final String userAgent = request.getHeader("USER-AGENT");
+		//判断浏览器代理并分别设置响应给浏览器的编码格式
+		String finalFileName = null;
+		if (StringUtils.contains(userAgent, "MSIE") || StringUtils.contains(userAgent, "Trident")) {
+			// IE浏览器
+			finalFileName = URLEncoder.encode(fileZip, "UTF8");
+			System.out.println("IE浏览器");
+		} else if (StringUtils.contains(userAgent, "Mozilla")) {
+			// google,火狐浏览器
+			finalFileName = new String(fileZip.getBytes(), "ISO8859-1");
+		} else {
+			// 其他浏览器
+			finalFileName = URLEncoder.encode(fileZip, "UTF8");
+		}
+		// 告知浏览器下载文件,而不是直接打开,浏览器默认为打开
+		response.setContentType("application/x-download");
+		// 下载文件的名称
+		response.setHeader("Content-Disposition", "attachment;filename=\"" + finalFileName + "\"");
+
+		ServletOutputStream servletOutputStream = null;
+		try {
+			servletOutputStream = response.getOutputStream();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		DataOutputStream temps = new DataOutputStream(
+			servletOutputStream);
+		// 浏览器下载文件的路径
+		DataInputStream in = null;
+		try {
+			in = new DataInputStream(
+				new FileInputStream(filePath));
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+		}
+		byte[] b = new byte[2048];
+		// 之后用来删除临时压缩文件
+		File reportZip = new File(filePath);
+		try {
+			while ((in.read(b)) != -1) {
+				temps.write(b);
+			}
+			temps.flush();
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (temps != null) {
+				try {
+					temps.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+			if (in != null) {
+				try {
+					in.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+			if (reportZip != null) {
+				// 删除服务器本地产生的临时压缩文件!
+				reportZip.delete();
+			}
+			try {
+				servletOutputStream.close();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+
+	public static void main(String[] args) {
         // 调用方法进行测试
     }
 }

--
Gitblit v1.9.3