Jelajahi Sumber

徐明浩
压力容器年检报告批量导出
压力管道年检报告批量导出

徐明浩 3 tahun lalu
induk
melakukan
0d7dac345f

+ 103 - 0
master/src/main/java/com/ruoyi/common/utils/document/ZipUtil.java

@@ -0,0 +1,103 @@
+package com.ruoyi.common.utils.document;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+/**
+ * 压缩工具Util
+ */
+public class ZipUtil {
+
+    public static void createZip(String filePath, String folder, String zipName, List<String> fileNames, HttpServletResponse response) throws Exception {
+        OutputStream out = null;
+        ByteArrayOutputStream baos = new ByteArrayOutputStream(1000);
+        List<File> fileList = new ArrayList<>();
+        for (String fileName : fileNames) {
+            File file = new File(filePath + "\\" + folder + "\\" + fileName);
+            fileList.add(file);
+        }
+        String zip = filePath + "/" + folder + "/" + zipName;
+        try {
+            File file = new File(filePath + "/" + folder);
+            if (!file.isDirectory()) {
+                file.mkdir();
+            }
+            File zipFile = new File(zip);
+            if (!zipFile.exists()) {
+                zipFile.createNewFile();
+            }
+            // 将package.zip的File对象传到toZip对象中
+            toZip(fileList, zipFile);
+            //把指定文件提取成流
+            FileInputStream fis = new FileInputStream(zip);
+            // 设置响应消息头,告诉浏览器当前响应是一个下载文件
+            response.setContentType("application/x-msdownload");
+            // 告诉浏览器,当前响应数据要求用户干预保存到文件中,以及文件名是什么 如果文件名有中文,必须URL编码
+            String fileName = URLEncoder.encode(zipName, "UTF-8");
+            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+            out = response.getOutputStream();
+            byte[] b = new byte[1000];
+            int n;
+            while ((n = fis.read(b)) != -1) {
+                baos.write(b, 0, n);
+            }
+            fis.close();
+            baos.writeTo(out);
+            baos.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new Exception("导出失败:" + e.getMessage());
+        } finally {
+            if (baos != null) {
+                baos.close();
+            }
+            if (out != null) {
+                out.close();
+            }
+        }
+    }
+
+    /**
+     * 把文件集合打成zip压缩包
+     *
+     * @param srcFiles 压缩文件集合
+     * @param zipFile  zip文件名
+     * @throws RuntimeException 异常
+     */
+    public static void toZip(List<File> srcFiles, File zipFile) throws IOException {
+        if (zipFile == null) {
+            return;
+        }
+        if (!zipFile.getName().endsWith(".zip")) {
+            return;
+        }
+        ZipOutputStream zos = null;
+        FileOutputStream out = new FileOutputStream(zipFile);
+        try {
+            zos = new ZipOutputStream(out);
+            for (File srcFile : srcFiles) {
+                byte[] buf = new byte[128];
+                zos.putNextEntry(new ZipEntry(srcFile.getName()));
+                int len;
+                // 读取文件并写入到zip中
+                FileInputStream in = new FileInputStream(srcFile);
+                while ((len = in.read(buf)) != -1) {
+                    zos.write(buf, 0, len);
+                    zos.flush();
+                }
+                in.close();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (zos != null) {
+                zos.close();
+            }
+        }
+    }
+}