文件导出ZIP压缩
文件导出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压缩的更多相关文章
- C# 对多个文件进行zip压缩
本文使用的ICSharpCode.SharpZipLib.dll类库来实现文件压缩,你可以通过Nuget来安装此类库,或者到搜索引擎去搜索一下遍地都是.类库下载下来之后,添加到项目引用就可以了.下面这 ...
- C#使用SharpZipLib解压多文件的zip压缩文件数据流,保存到本地
代码: public async Task<ReturnModel<List<string>>> UploadModel() { var task = new Ta ...
- PHP生成ZIP压缩文件
PHP生成ZIP压缩文件 /* * 生成zip压缩文件 * $sourceDir:被压缩的文件夹或文件 * $outFileName:输出的压缩文件名称 * */ function createZip ...
- Spark- Spark从SFTP中读取zip压缩文件数据做计算
我们遇到个特别的需求,一个数据接入的流程跑的太慢,需要升级为用大数据方式去处理,提高效率. 数据: 数据csv文件用Zip 压缩后放置在SFTP中 数据来源: SFTP 数据操作: 文件和它的压缩包一 ...
- Java Zip压缩实现
最近在自学javaWeb,先复习一下java,把还给老师的东西再找回来(知识如果不用很快就会忘记啊).. 今天看到了zip压缩,决定要整理一下. java将有关zip压缩的内容都封装在java.uti ...
- linux的文件打包与压缩
简介 Linux 上常用的压缩/解压工具,介绍了zip.rar.tar的使用. 文件打包和压缩 Linux 上的压缩包文件格式,除了 Windows 最常见的*.zip.*.rar..7z 后缀的压缩 ...
- NPOI,导出Execl,压缩文件zip,发送Email
private void SendEmail(string emailAddress, string companyName,string proxy, string officer, DataTab ...
- 【VC++技术杂谈008】使用zlib解压zip压缩文件
最近因为项目的需要,要对zip压缩文件进行批量解压.在网上查阅了相关的资料后,最终使用zlib开源库实现了该功能.本文将对zlib开源库进行简单介绍,并给出一个使用zlib开源库对zip压缩文件进行解 ...
- Zip文件压缩(加密||非加密||压缩指定目录||压缩目录下的单个文件||根据路径压缩||根据流压缩)
1.写入Excel,并加密压缩.不保存文件 String dcxh = String.format("%03d", keyValue); String folderFileName ...
- linux专题一之文件归档和压缩(tar、file、zip)
本文主要从以下几个方便来说明文件的归档和压缩,同时比较几种不同压缩方法的压缩比率及特点. 文件归档命令tar,tar.gz源码包的安装管理 创建tar包-解压-查询tar包内容 zip命令的用法 为 ...
随机推荐
- RocksDB 二级缓存
本文分享自天翼云开发者社区<RocksDB 二级缓存>,作者:b****n RocksDB 团队正在实现对非易失性介质上的块缓存的支持.可以看作是 RocksDB 当前的易失性块缓存的扩展 ...
- 《中国电信天翼云PON SD-WAN技术白皮书》来了,这份技术指南不要错过!
5月17日,在中国电信第三届科技节·上海站暨517世界电信日活动上,天翼云联合中国电信上海公司正式发布<中国电信天翼云PON SD-WAN技术白皮书>,为中国电信深入实施"云转数 ...
- Linux安装Python 3.11
Linux安装python 在Linux上安装Python 3.11,你可以按照以下步骤进行.这些步骤以CentOS为例,但其他Linux发行版的过程大同小异,可能只需稍作调整. 1. 检查Pytho ...
- 克鲁斯焊机GL 270引弧困难维修
克鲁斯焊机维修: 对于客户而言,其受益之处在于所有的机械手系统部件,从机械手控制.工件.定位器.传感器到电源和焊枪,都是由一家供应商开发和制造的.而诸如熔化极惰性气体/活性气体保护双丝焊接技术.等离子 ...
- KUKA库卡机器人保养维修
KUKA机器人由机械手和控制柜组成,每日机器人保养包括:控制箱.教导盒.手腕之表面擦拭,还有噴槍之清洁. KUKA机器人控制柜保养1)断掉控制柜的所有供电电源.2)检查主机板.存储板.计算板.以及驱动 ...
- elementUI中如何在Tabs标签页的标题文字后面添加文字或图标
1.效果如下: 实现代码如下:<el-tab-pane name="first"> <span slot="label"> <sp ...
- Java - 高射炮打蚊子(第二弹)
题记部分 01 || 面试题 001 || 什么是JVM JVM(Java虚拟机)是Java程序运行的环境,它是一个抽象的计算机,包括指令集.寄存器集.堆栈.垃圾回收等.JVM屏蔽了与具体操作系统平台 ...
- Linux - 安装centos7.x之后发现ping不了www.baidu.com
1.首先检查网络配置 /etc/sysconfig/network-scripts 下的网卡配置文件是否有误 检查方向:IP.网关.子网掩码.DNS.ONBOOT参数 2.检查防火墙是否关闭 # 查看 ...
- DOS批处理小案例应用分享 - 整理桌面
想必大多数办公的同志都有个习惯----往桌面上堆放文件,各种文件.几天下来桌面就杂乱无章,乱七八糟的.能做一个快速清理的功能,是很有实用价值的.比如采用Windows自带的DOS批处理系统,就可快速搭 ...
- 机器学习 | 强化学习(5) | 价值函数拟合(Value Function Approximation)
价值函数拟合(Value Function Approximation) 导论(Introduction) 目前的价值函数都是基于打表法(lookup table)进行穷举 对于所有状态\(s\)都有 ...