data/db_fn.sql | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/controller/data/MetaController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/helper/Zip4jHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/service/data/DownloadService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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; 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); } 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加密强度:KEY_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加密强度:KEY_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(); 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); } } } }