文件导出ZIP压缩

	@Override
public String downloadallfiles(HttpServletRequest request, String lsbpId, String bsTitle) {
JwtUserObject jwtUserObject = JwtUtil.getJwtUserObj(request.getHeader("Authorization"));
String userid = jwtUserObject.getUSERID();
String username = jwtUserObject.getUSERNAME();
String itemcode = jwtUserObject.getITEMCODE();
String orgcode = jwtUserObject.getORGCODE();
String useridentity = jwtUserObject.getUSERIDENTITY();
//判断是否已经压缩过该文件
List<FileObject> list = benbuMapper.findCzFileZipById(lsbpId);
if (list!=null && list.size() > 0) {
String path = sso.getPresignedObjectUrlByBucketNameAndPath(list.get(0).getBucketname(), list.get(0).getFilepath());
return path;
} File file1 = new File(tempfile);
if (!file1.exists()) {
file1.mkdirs();
} else {
deleteFile(file1);
if (flag == 1) {
System.out.println("文件删除成功!");
}
file1.mkdirs();
}
//根据本部主键查询厂站报送的文件
List<HashMap<String, String>> files = benbuMapper.findCzFileById(lsbpId);
if (files != null && files.size() > 0) {
for (HashMap map : files) {
//临时目录下新增文件
File file2 = new File(tempfile + "/" + map.get("itemCode"));
if (!file2.exists()) {
file2.mkdirs();
}
sso.downLoadFileByid((String) map.get("fileId"), tempfile + "/" + map.get("itemCode"));
}
}
//文件压缩
FileZipUtil.compressToZip(tempfile, zipDowload, bsTitle + ".zip"); FileItem fileItem = null;
MultipartFile file = getMultipartFile(bsTitle);
FileObject fileObject2 = sso.uploadFileCommondLs(file, userid, username, itemcode, orgcode, "10005", useridentity, lsbpId,
itemcode.toLowerCase(), FileTypeConstant.COMP_10 + "/10005/", "");
String path = sso.getPresignedObjectUrlByBucketNameAndPathLs(fileObject2.getBucketname(), fileObject2.getFilepath()); //删除本地文件
deleteFile(new File(zipDowload)); return path; }

文件压缩工具类

public class FileZipUtil {
/**
* 压缩文件
*
* @param sourceFilePath 源文件路径
* @param zipFilePath 压缩后文件存储路径
* @param zipFilename 压缩文件名
*/
public static String compressToZip(String sourceFilePath, String zipFilePath, String zipFilename) {
File sourceFile = new File(sourceFilePath);
File zipPath = new File(zipFilePath);
if (!zipPath.exists()) {
zipPath.mkdirs();
}
File zipFile = new File(zipPath + File.separator + zipFilename);
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
writeZip(sourceFile, "", zos);
return "压缩完成";
//文件压缩完成后,删除被压缩文件
// boolean flag = deleteDir(sourceFile);
// System.out.println(flag);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage(), e.getCause());
}
} /**
* 遍历所有文件,压缩
*
* @param file 源文件目录
* @param parentPath 压缩文件目录
* @param zos 文件流
*/
public static void writeZip(File file, String parentPath, ZipOutputStream zos) throws IOException {
if (file.isDirectory()) {
//目录
parentPath += file.getName() + File.separator;
File[] files = file.listFiles();
for (File f : files) {
writeZip(f, parentPath, zos);
}
} else {
//文件
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
//指定zip文件夹
ZipEntry zipEntry = new ZipEntry(parentPath + file.getName());
zos.putNextEntry(zipEntry);
int len;
byte[] buffer = new byte[1024 * 10];
while ((len = bis.read(buffer, 0, buffer.length)) != -1) {
zos.write(buffer, 0, len);
zos.flush();
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage(), e.getCause());
}
}
} /**
* 删除文件夹
*
* @param dir
* @return
*/
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
//删除空文件夹
return dir.delete();
}
}

优化

@NotNull
private static String zipPersonFace(List<PersonVo> personList) {
String compressedPath = FilePathConfig.gettempfilepath() + "人脸照片.zip";
log.info("使用Buffer流压缩。。。。。。。。。。");
long beginTime = System.currentTimeMillis();
try {
FileOutputStream fos = new FileOutputStream(compressedPath);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ZipOutputStream zipOut = new ZipOutputStream(bos);
zipOut.setLevel(Deflater.BEST_SPEED);
for (PersonVo personVo : personList) {
zipFaceByUrl(personVo, zipOut);
}
zipOut.close();
bos.close();
fos.close();
long endTime = System.currentTimeMillis();
log.info("导出用时:" + (endTime - beginTime));
} catch (IOException e) {
log.error("导出失败..." + e);
throw new BusinessException(ResultCode.OPERATION_FAILURE, "导出失败..." + e);
}
return FilePathConfig.DOWNLOAD_URL + "人脸照片.zip";
}
private static void zipFaceByUrl(PersonVo personVo, ZipOutputStream zipOut) throws IOException {
String faceUrl = personVo.getFaceUrl();
if (StrUtil.isEmpty(faceUrl) || !faceUrl.startsWith("http")) {
return;
}
URL url = new URL(faceUrl);
BufferedInputStream bis = new BufferedInputStream(url.openStream());
String suffix;
if (faceUrl.contains("?")) {
suffix = faceUrl.substring(faceUrl.lastIndexOf("."), faceUrl.indexOf("?"));
} else {
suffix = faceUrl.substring(faceUrl.lastIndexOf("."));
}
//照片名称
String fileName = personVo.getDepartmentName() + "_" + personVo.getName() + "(" + personVo.getCode() + ")" + suffix;
ZipEntry zipEntry = new ZipEntry(fileName);
zipOut.putNextEntry(zipEntry);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
zipOut.write(buffer, 0, bytesRead);
}
zipOut.closeEntry();
bis.close();
}

文件导出ZIP压缩的更多相关文章

  1. C# 对多个文件进行zip压缩

    本文使用的ICSharpCode.SharpZipLib.dll类库来实现文件压缩,你可以通过Nuget来安装此类库,或者到搜索引擎去搜索一下遍地都是.类库下载下来之后,添加到项目引用就可以了.下面这 ...

  2. C#使用SharpZipLib解压多文件的zip压缩文件数据流,保存到本地

    代码: public async Task<ReturnModel<List<string>>> UploadModel() { var task = new Ta ...

  3. PHP生成ZIP压缩文件

    PHP生成ZIP压缩文件 /* * 生成zip压缩文件 * $sourceDir:被压缩的文件夹或文件 * $outFileName:输出的压缩文件名称 * */ function createZip ...

  4. Spark- Spark从SFTP中读取zip压缩文件数据做计算

    我们遇到个特别的需求,一个数据接入的流程跑的太慢,需要升级为用大数据方式去处理,提高效率. 数据: 数据csv文件用Zip 压缩后放置在SFTP中 数据来源: SFTP 数据操作: 文件和它的压缩包一 ...

  5. Java Zip压缩实现

    最近在自学javaWeb,先复习一下java,把还给老师的东西再找回来(知识如果不用很快就会忘记啊).. 今天看到了zip压缩,决定要整理一下. java将有关zip压缩的内容都封装在java.uti ...

  6. linux的文件打包与压缩

    简介 Linux 上常用的压缩/解压工具,介绍了zip.rar.tar的使用. 文件打包和压缩 Linux 上的压缩包文件格式,除了 Windows 最常见的*.zip.*.rar..7z 后缀的压缩 ...

  7. NPOI,导出Execl,压缩文件zip,发送Email

    private void SendEmail(string emailAddress, string companyName,string proxy, string officer, DataTab ...

  8. 【VC++技术杂谈008】使用zlib解压zip压缩文件

    最近因为项目的需要,要对zip压缩文件进行批量解压.在网上查阅了相关的资料后,最终使用zlib开源库实现了该功能.本文将对zlib开源库进行简单介绍,并给出一个使用zlib开源库对zip压缩文件进行解 ...

  9. Zip文件压缩(加密||非加密||压缩指定目录||压缩目录下的单个文件||根据路径压缩||根据流压缩)

    1.写入Excel,并加密压缩.不保存文件 String dcxh = String.format("%03d", keyValue); String folderFileName ...

  10. linux专题一之文件归档和压缩(tar、file、zip)

     本文主要从以下几个方便来说明文件的归档和压缩,同时比较几种不同压缩方法的压缩比率及特点. 文件归档命令tar,tar.gz源码包的安装管理 创建tar包-解压-查询tar包内容 zip命令的用法 为 ...

随机推荐

  1. 腾讯云 TI 平台部署与调用DeepSeek-R1大模型的实战指南

    今天我们将继续探讨如何部署一个私有化的 DeepSeek-R1 大模型,具体的部署过程我们将利用腾讯云的 TI 平台进行操作.当前,腾讯云 TI 平台为用户提供了免费体验的满血版 DeepSeek-R ...

  2. redis 执行性能检测指令报错:-bash: redis-benchmark: command not found

    最近在看redis相关的内容,redis有自带检测性能的命令: -bash: redis-benchmark: command not found 碰到的所有资料中均提示不能在redis客户端中执行, ...

  3. Iceberg治理服务Amoro---配置Prometheus + Grafana看板

    一.基础资料 1.mac安装Prometheus + Grafana https://www.cnblogs.com/robots2/p/18689540 2.配置文档 https://amoro.a ...

  4. Java 将 RTF 转换为Word、PDF、HTML、图片

    RTF文档因其跨平台兼容性而广泛使用,但有时在不同的应用场景可能需要特定的文档格式.例如,Word文档适合编辑和协作,PDF文档适合打印和分发,HTML文档适合在线展示,图片格式则适合社交媒体分享.因 ...

  5. 本地部署DeepSeek后,没有好看的交互界面怎么行!

    大家好,我是晓凡. 写在前面 在前面的文章中手摸手的带小伙伴们在本地部署了DeepSeek.但是,部署完之后,我们要与之交互,只能在命令行中进行. 忘记怎么部署的小伙伴,来这儿复习一下~ 命令行交互如 ...

  6. 安川Yaskawa机器人DX100示教器维修的方法

    安川Yaskawa机器人DX100示教器维修的优劣势分析 安川Yaskawa机器人示教编程,工业机器人维修,即操作人员经过安川机器人示教器,ABB机器人保养,手动操控机器人的关节运动,以使机器人运动到 ...

  7. 库卡机器人KR500维修保养

    随着现代工业自动化,KUKA库卡机器人以其卓越的性能.灵活的操作和高效的产出而备受赞誉.然而,为了确保机器人的持续稳定运行和延长使用寿命,应联系子锐机器人维修对库卡机器人保养至关重要. 一.库卡机器人 ...

  8. __I、 __O 、__IO是什么意思?volatile,const 怎么用?

    原文:https://blog.csdn.net/qq_27312943/article/details/51273064 __I. __O .__IO是什么意思? 这是ST库里面的宏定义,定义如下: ...

  9. CentOS安装nginx服务器及配置反向代理

    以下是在CentOS上安装nginx服务器并配置反向代理的步骤: 更新系统软件包: sudo yum update 安装nginx: sudo yum install nginx 启动nginx服务: ...

  10. 大数据之路Week10_day07 (JavaAPI 操作Redis 与Hbase建立索引,通过查询redis中的索引查询Hbase数据)

    在这里是简单模拟将索引存到redis中,再通过先查询索引再将Hbase中的数据查询出来. 需要考虑的问题: 1.建立redis的连接,建立Hbase的连接 2.如何创建索引,即创建索引的key和val ...