From da2330bb7951c602ebe72a9f53ff13d0895b3349 Mon Sep 17 00:00:00 2001
From: jinlin <jinlin>
Date: 星期五, 15 十二月 2023 10:57:55 +0800
Subject: [PATCH] 修改

---
 core/src/main/java/com/zt/life/sys/service/SysOssConfigService.java |   78 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 78 insertions(+), 0 deletions(-)

diff --git a/core/src/main/java/com/zt/life/sys/service/SysOssConfigService.java b/core/src/main/java/com/zt/life/sys/service/SysOssConfigService.java
index 15dd4b2..f782b58 100644
--- a/core/src/main/java/com/zt/life/sys/service/SysOssConfigService.java
+++ b/core/src/main/java/com/zt/life/sys/service/SysOssConfigService.java
@@ -13,16 +13,27 @@
 import com.zt.core.oss.service.ISysOssConfigService;
 import com.zt.core.oss.service.ISysOssService;
 import com.zt.life.core.constant.Cache;
+import com.zt.life.export.service.DownloadService;
+import com.zt.life.oss.OssEncryptService;
 import com.zt.life.sys.dao.SysOssConfigDao;
 import com.zt.life.sys.dto.OssDto;
 import com.zt.life.sys.mapstruct.OssExMapper;
 import com.zt.life.sys.model.SysOssConfig;
+import com.zt.life.util.ZipCipherUtil;
 import com.zt.modules.oss.model.SysOss;
 import com.zt.modules.oss.service.SysOssService;
+import org.apache.commons.io.FileUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -42,6 +53,15 @@
 
     @Autowired
     private SysOssService sysOssServices;
+
+    @Value("${zt.oss.local-path}")
+    private String localPath;
+
+    @Value("${data.key}")
+    private String key;
+
+    @Autowired
+    private OssEncryptService ossEncryptService;
 
     /**
      * 鍒嗛〉鏌ヨ
@@ -320,4 +340,62 @@
         return baseDao.selectList(new QueryWrapper<SysOssConfig>().eq(Constant.TableColumn.IS_DELETE, Constant.Bool.NO).lambda()
                 .eq(SysOssConfig::getBusiType, busiType));
     }
+
+    public void downloadFilesByosList(HttpServletRequest request, HttpServletResponse response, List<SysOss> list, String projectName) {
+        try {
+            String uuid = UUIDUtil.getUUID();
+            String remoteFileFullPath = Paths.get(localPath, "temp", uuid).toString();
+            Files.createDirectories(Paths.get(remoteFileFullPath));
+
+            for (SysOss so : list) {
+                try {
+                    String localFileFullPath = Paths.get(localPath, so.getPath()).toString();
+                    File localFile = new File(localFileFullPath);
+                    if (localFile.exists()) {
+                        try (InputStream in = ossEncryptService.decrypt(localFile);
+                             BufferedInputStream bis = new BufferedInputStream(in);
+                             BufferedOutputStream bos = new BufferedOutputStream(
+                                     new FileOutputStream(remoteFileFullPath + File.separator + so.getName()))) {
+
+                            byte[] buffer = new byte[1024];
+                            int len;
+                            while ((len = bis.read(buffer)) != -1) {
+                                bos.write(buffer, 0, len);
+                            }
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace(); // 鎴栬�呰褰曟棩蹇�
+                }
+            }
+
+            String fileNameZip = Paths.get(localPath, "temp", uuid + ".zip").toString();
+            new ZipCipherUtil().encryptZip(remoteFileFullPath, fileNameZip, key);
+
+            File zipFile = new File(fileNameZip);
+            response.reset();
+            response.setContentLength((int) zipFile.length());
+            response.setContentType("application/octet-stream;charset=UTF-8");
+            String encodedFilename = DownloadService.getNameEncoder(request, projectName + ".zip");
+            response.addHeader("Content-Disposition", "attachment;filename=" + encodedFilename);
+
+            try (FileInputStream fileInputStream = new FileInputStream(zipFile);
+                 ServletOutputStream outputStream = response.getOutputStream()) {
+
+                byte[] buffers = new byte[1024];
+                int length;
+                while ((length = fileInputStream.read(buffers)) > 0) {
+                    outputStream.write(buffers, 0, length);
+                }
+
+            } catch (IOException e) {
+                e.printStackTrace(); // 鎴栬�呰褰曟棩蹇�
+            } finally {
+                FileUtils.deleteQuietly(new File(remoteFileFullPath));
+                FileUtils.deleteQuietly(new File(fileNameZip));// 鍒犻櫎涓存椂鏂囦欢澶瑰強鍏跺唴瀹�
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace(); // 鎴栬�呰褰曟棩蹇�
+        }
+    }
 }

--
Gitblit v1.9.1