From 8cce08d1d96384edbd2d362173ffa98ca933ef13 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期一, 28 十一月 2022 14:06:42 +0800 Subject: [PATCH] 1 --- src/main/java/com/lf/server/controller/data/MetaController.java | 8 ++ src/main/java/com/lf/server/helper/Zip4jHelper.java | 75 +++++++++++++++++-------- data/db_fn.sql | 2 src/main/java/com/lf/server/service/data/DownloadService.java | 73 +++++++++++++++++++++++- 4 files changed, 129 insertions(+), 29 deletions(-) diff --git a/data/db_fn.sql b/data/db_fn.sql index d62b45d..8935ad9 100644 --- a/data/db_fn.sql +++ b/data/db_fn.sql @@ -349,7 +349,7 @@ select * from lf.sys_meta; -- delete from lf.sys_meta where id<113; select * from lf.sys_meta_file; -- delete from lf.sys_meta_file where metaid<113; -select * from lf.sys_meta_file a where metaid in (99,100,101) +select * from lf.sys_meta_file a where metaid in (113,120,121,122); alter sequence bd.dlg_agnp_gid_seq restart with 4000; select max(gid) from bd.dlg_agnp; diff --git a/src/main/java/com/lf/server/controller/data/MetaController.java b/src/main/java/com/lf/server/controller/data/MetaController.java index b180760..685a595 100644 --- a/src/main/java/com/lf/server/controller/data/MetaController.java +++ b/src/main/java/com/lf/server/controller/data/MetaController.java @@ -280,8 +280,14 @@ } List<MetaFileEntity> list = metaService.selectMetaFiles(reqEntity.getIds()); + if (null == list || list.isEmpty()) { + return fail("娌℃湁鎵惧埌鍏冩暟鎹�"); + } - return success(true); + UserEntity ue = tokenService.getCurrentUser(req); + String guid = downloadService.zipFiles(ue, list, reqEntity.getPwd()); + + return success(guid); } catch (Exception ex) { return fail(ex.getMessage(), null); } diff --git a/src/main/java/com/lf/server/helper/Zip4jHelper.java b/src/main/java/com/lf/server/helper/Zip4jHelper.java index 2cf0b41..57a6ebb 100644 --- a/src/main/java/com/lf/server/helper/Zip4jHelper.java +++ b/src/main/java/com/lf/server/helper/Zip4jHelper.java @@ -1,6 +1,5 @@ package com.lf.server.helper; -import com.google.common.base.Strings; import net.lingala.zip4j.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; @@ -12,7 +11,7 @@ import org.apache.commons.logging.LogFactory; import java.io.File; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; /** * Zip4j甯姪绫� @@ -24,15 +23,15 @@ /** * Zip鍘嬬缉 * - * @param zipFilePath zip鏂囦欢 - * @param sourcePath 婧愯矾寰� - * @param password 瀵嗙爜 + * @param zipFile zip鏂囦欢 + * @param sourcePath 婧愯矾寰� + * @param pwd 瀵嗙爜 * @return 鎴愬姛鏄惁 */ - public static boolean zip(String zipFilePath, String sourcePath, String password) { + public static boolean zip(String zipFile, String sourcePath, String pwd) { try { - ZipFile zip = new ZipFile(zipFilePath); - zip.setCharset(Charset.forName("UTF-8")); + ZipFile zip = StringHelper.isEmpty(pwd) ? new ZipFile(zipFile) : new ZipFile(zipFile, pwd.toCharArray()); + zip.setCharset(StandardCharsets.UTF_8); File f = zip.getFile(); if (!f.getParentFile().exists()) { @@ -42,22 +41,7 @@ f.delete(); } - // 璁剧疆鍘嬬缉鏂囦欢鍙傛暟 - ZipParameters params = new ZipParameters(); - // 鍘嬬缉鏂瑰紡 - params.setCompressionMethod(CompressionMethod.DEFLATE); - // 鍘嬬缉绾у埆 - params.setCompressionLevel(CompressionLevel.NORMAL); - // 鏄惁璁剧疆鍔犲瘑鏂囦欢 - params.setEncryptFiles(true); - // 璁剧疆AES鍔犲瘑寮哄害锛欿EY_STRENGTH_256 - params.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_128); - // 璁剧疆鍔犲瘑绠楁硶 - params.setEncryptionMethod(EncryptionMethod.AES); - // 璁剧疆瀵嗙爜 - if (!Strings.isNullOrEmpty(password)) { - zip.setPassword(password.toCharArray()); - } + ZipParameters params = getZipParams(); // 瑕佹墦鍖呯殑鏂囦欢鎴栨枃浠跺す File currentFile = new File(sourcePath); @@ -74,6 +58,49 @@ } } + /** + * 鍒涘缓ZipFile + */ + public static ZipFile createZipFile(String zipFile, String pwd) { + try { + ZipFile zip = StringHelper.isEmpty(pwd) ? new ZipFile(zipFile) : new ZipFile(zipFile, pwd.toCharArray()); + zip.setCharset(StandardCharsets.UTF_8); + + File f = zip.getFile(); + if (!f.getParentFile().exists()) { + f.getParentFile().mkdirs(); + } + if (f.exists()) { + f.delete(); + } + + return zip; + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + return null; + } + } + + /** + * 鑾峰彇ZipParameters + */ + public static ZipParameters getZipParams() { + // 璁剧疆鍘嬬缉鏂囦欢鍙傛暟 + ZipParameters params = new ZipParameters(); + // 鍘嬬缉鏂瑰紡 + params.setCompressionMethod(CompressionMethod.DEFLATE); + // 鍘嬬缉绾у埆 + params.setCompressionLevel(CompressionLevel.MAXIMUM); + // 鏄惁璁剧疆鍔犲瘑鏂囦欢 + params.setEncryptFiles(true); + // 璁剧疆AES鍔犲瘑寮哄害锛欿EY_STRENGTH_256 + params.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_128); + // 璁剧疆鍔犲瘑绠楁硶 + params.setEncryptionMethod(EncryptionMethod.AES); + + return params; + } + private static void addZipFile(ZipFile zip, ZipParameters params, File file) throws ZipException { if (file.isDirectory()) { File[] files = file.listFiles(); diff --git a/src/main/java/com/lf/server/service/data/DownloadService.java b/src/main/java/com/lf/server/service/data/DownloadService.java index fee2ab5..5a4741b 100644 --- a/src/main/java/com/lf/server/service/data/DownloadService.java +++ b/src/main/java/com/lf/server/service/data/DownloadService.java @@ -2,16 +2,20 @@ import com.lf.server.entity.ctrl.DownloadReqEntity; import com.lf.server.entity.data.DownloadEntity; -import com.lf.server.helper.PathHelper; -import com.lf.server.helper.RsaHelper; -import com.lf.server.helper.StringHelper; +import com.lf.server.entity.data.MetaFileEntity; +import com.lf.server.entity.sys.UserEntity; +import com.lf.server.helper.*; import com.lf.server.mapper.data.DownloadMapper; +import net.lingala.zip4j.ZipFile; +import net.lingala.zip4j.model.ZipParameters; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.File; +import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -147,4 +151,67 @@ return null; } } + + /** + * 鎵撳寘鏂囦欢 + * + * @param ue 鐢ㄦ埛瀹炰綋 + * @param list 鍏冩暟鎹枃浠堕泦鍚� + * @param pwd 瀵嗙爜 + * @return 涓嬭浇鏂囦欢GUID + */ + public String zipFiles(UserEntity ue, List<MetaFileEntity> list, String pwd) { + rmRepeatMetaFiles(list); + + String downloadPath = pathHelper.getDownloadFullPath(); + String zipName = StringHelper.YMDHMS2_FORMAT.format(new Date()) + ".zip"; + String zipFile = downloadPath + File.separator + zipName; + + ZipFile zip = Zip4jHelper.createZipFile(zipFile, pwd); + ZipParameters params = Zip4jHelper.getZipParams(); + + addMetaFiles(zip, params, list); + + return null; + } + + /** + * 绉婚櫎閲嶅鐨勫厓鏁版嵁鏂囦欢 + */ + private void rmRepeatMetaFiles(List<MetaFileEntity> list) { + List<String> guidList = new ArrayList<>(); + + int i = 0; + while (i < list.size()) { + MetaFileEntity entity = list.get(i); + if (guidList.contains(entity.getGuid())) { + list.remove(i); + continue; + } + + guidList.add(entity.getGuid()); + i++; + } + } + + /** + * 娣诲姞鍏冩暟鎹枃浠惰嚦Zip鍖� + */ + private void addMetaFiles(ZipFile zip, ZipParameters params, List<MetaFileEntity> list) { + String uploadPath = pathHelper.getConfig().getUploadPath(); + for (MetaFileEntity entity : list) { + String filePath = uploadPath + File.separator + entity.getPath(); + File file = new File(filePath); + File newFile = new File(filePath.replace(entity.getGuid(), entity.getName())); + + try { + file.renameTo(newFile); + zip.addFile(newFile, params); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + } finally { + newFile.renameTo(file); + } + } + } } -- Gitblit v1.9.3