文件导出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命令的用法 为 ...
随机推荐
- Luogu P3059 Concurrently Balanced Strings G 题解 [ 紫 ] [ 线性 dp ] [ 哈希 ] [ 括号序列 ]
模拟赛搬的题,dp 思路很明显,但难点就在于找到要转移的点在哪. 暴力 首先我们可以先考虑 \(k=1\) 的情况,这应该很好想,就是对于每一个右括号,找到其匹配的左括号,然后进行转移即可,这个过程可 ...
- autMan奥特曼机器人对接新千寻Pro微信框架详细教程
文件下载 1.安装指定版本微信 https://www.123865.com/s/3Wd9-q13jH 2.最新千寻pro下载 [点此网盘下载] 框架教程 1.安装上面的指定微信版本,跟最新的千寻框架 ...
- docker - [08] Portainer可视化面板安装
Docker图形化界面管理工具 一.运行容器 同时下载和使用镜像运行容器 docker run -d -p 8088:9000 \ --restart=always -v /var/run/docke ...
- Git - 安装Git
下载>> 安装 >> 下载 登录Git官网:https://git-scm.com/ 点击想要安装的版本 安装 1. 点击下一步(Next) 2. 选择安装路径 3. Git相 ...
- 帝国CMS下iframe标签无法引入视频,ueditor编辑器中html标签无法显示问题,设置ueditor默认行高为1.75
问题描述: 1.帝国cms后台添加优酷视频,使用到iframe,富文本编辑器中使用iframe引入视频后检查发现html代码未出现iframe字样,排查后发现为ueditor限制过滤了部分html代码 ...
- 【ABAQUS文档笔记】实体单元特性&剪切闭锁-沙漏问题-非协调模式-混杂单元
来自ABAQUS DOCUMENT/GETTING STARTED WITH ABAQUS/CAE /USING CONTINUUM ELEMENTS 1. 单元公式和积分 1.1 full inte ...
- 自己修改的一款Typora学术主题Academic-zh-vq
这款typora主题是在Academic-Zh主题的基础上修改而来的. 主题衍生路径: 官方Academic主题-->zh-academic主题-->Academic-Zh主题--> ...
- jmeter 压测tcp协议
https://www.cnblogs.com/TestSu/p/10552239.html
- Linux下yum安装mysql 遇到的问题Can't open and lock privilege tables: Table 'mysql.user' doesn't exist 错误
今天在linux下安装mysql时 执行service mysqld start时, mysql总是启动失败 后来查看mysql日志:/var/log/mysqld.log,发现有个Can't ope ...
- 记录composer 安装 yii2项目
先带上一个痛苦面具 前段时间换成mac系统,自己以前的yii2项目老是安装不上,因为暂时用不上就没去管,现在想用了,折腾了半天才安装好.下面我记录下坑 国内记得换镜像(我换了系统后,应该是忘记了) c ...