Java操作ZIp文件
目录
- Java操作文件打包下载
- Java操作文件打包上传
- 注意事项
Java操作文件打包下载
public void downloadEcsZip(String fileName,List<Map<String,String>> filesMap,HttpServletResponse response) throws AppException {// 设置浏览器显示的内容类型为Zipresponse.setContentType("application/zip");// 设置文件名try {response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName,"UTF-8"));} catch (UnsupportedEncodingException e) {throw new AppException("不支持的编码格式");}try(ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) {// 读取文件的缓存EcsHelper ecsHelper = EcsHelper.getInstance();for (Map<String,String> file : filesMap) {String ecsId = file.get("ecsId");String name = file.get("name");InputStream inputStream = ecsHelper.readObject(ecsId);// 把inputstream写入到zip流里writeToZipFile(zos, inputStream, name);}}catch (Exception e){LogHelper.error("下载文件异常!", e);throw new AppException("下载文件异常!", e);}}private void writeToZipFile(ZipOutputStream zipOutput, InputStream inputStream, String fileName)throws IOException {try (BufferedInputStream bis = new BufferedInputStream(inputStream)) {ZipEntry entry = new ZipEntry(fileName);zipOutput.putNextEntry(entry);// 向压缩文件中输出数据int length;byte[] buffer = new byte[4096];while ((length = bis.read(buffer)) != -1) {zipOutput.write(buffer, 0, length);}} catch (IOException e) {LogHelper.error("将文件写入压缩文件中出现异常:", e);} finally {if (zipOutput != null) {zipOutput.flush();zipOutput.closeEntry();}}}
Java操作文件打包上传
public String packageFile(String fileName, List<Map<String, String>> filesMap,String email) throws AppException {String encodeName;byte[] srcs;// 设置文件名try {encodeName = URLEncoder.encode(fileName, "UTF-8");} catch (UnsupportedEncodingException e) {throw new AppException("不支持的编码格式");}try (ByteArrayOutputStream bos = new ByteArrayOutputStream();ZipOutputStream zos = new ZipOutputStream(bos)) {// 读取文件的缓存EcsHelper ecsHelper = EcsHelper.getInstance();for (Map<String, String> file : filesMap) {String ecsId = file.get("ecsId");String name = file.get("name");InputStream inputStream = ecsHelper.readObject(ecsId);// 把inputstream写入到zip流里writeToZipFile(zos, inputStream, name);log.info("打包单个文件进zip完成,zipName="+fileName+",name="+name+",ecsId="+ecsId);}zos.finish();srcs = bos.toByteArray();log.info("打包文件进zip完成,zipName="+fileName);} catch (Exception e) {LogHelper.error("下载Ecs文件异常!", e);throw new AppException("下载Ecs文件异常!", e);}String url= "";try (InputStream stream = new ByteArrayInputStream(srcs)) {S3ObjectMetadata metadata = new S3ObjectMetadata();metadata.setContentDisposition("attachment; filename=" + encodeName);String packageBucketName = AppConfig.getInstance().getPackageBucketName();String key = CommonUtils.getUUID("N");EcsHelper.getInstance().createObject(key, stream, packageBucketName,"application/zip", metadata);log.info("上传zip到ecs完成,zipName="+fileName);url = EcsHelper.getInstance().getStaticUrl(key, packageBucketName);log.info("获取zip链接完成,zipName="+fileName);}catch (Exception e){LogHelper.error("上传Zip文件异常!", e);throw new AppException("上传文件异常!", e);}return url;}private void writeToZipFile(ZipOutputStream zipOutput, InputStream inputStream, String fileName)throws IOException {try (BufferedInputStream bis = new BufferedInputStream(inputStream)) {ZipEntry entry = new ZipEntry(fileName);zipOutput.putNextEntry(entry);// 向压缩文件中输出数据int length;byte[] buffer = new byte[1024];while ((length = bis.read(buffer)) != -1) {zipOutput.write(buffer, 0, length);}} catch (IOException e) {LogHelper.error("将文件写入压缩文件中出现异常:", e);} finally {if (zipOutput != null) {zipOutput.flush();zipOutput.closeEntry();}}}
注意事项
上传时ZipOutputStream 要手动finish();否则会导致压缩包解压出现末尾损坏的警告。
Java操作ZIp文件相关推荐
- java 操作Zip文件(压缩、解压、加密)
java 操作Zip文件(压缩.解压.加密) 依赖:点击下载 package com.zxl.test;import net.lingala.zip4j.model.ZipParameters; im ...
- java zip文件操作,java 关于 zip 文件 的 基本操作
这里用的是appache的包 为了防止文件中文名乱码问题 java 操作 .zip 文件 压缩文件 解压文件 删除文件夹等 package com.gaeainfo.toponymbase.uti ...
- 利用java进行zip文件解压缩
利用java进行zip文件解压缩 本文利用Java的zip包中的ZipFile和ZipEntry两个类,获取到压缩包中的所有文件,并将压缩文件通过InputStream写入一个byte数组,再将该by ...
- Python操作Zip文件
Python操作Zip文件 需要使用到zipfile模块 读取Zip文件 随便一个zip文件,我这里用了bb.zip,就是一个文件夹bb,里面有个文件aa.txt.
- Java实现Zip文件解压
2019独角兽企业重金招聘Python工程师标准>>> ##1. 两种java实现zip文件解压方式 使用JDK的原生类java.util.zip,上代码: import java. ...
- JAVA操作属性文件,可进行读 写 更改
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! JAVA ...
- Java操作word文件的工具选择
Java操作word文件的工具选择 使用Java语言,创建doc.docx.excel.pdf等文档,并对文档进行一系列操作. Spire.Doc for Java https://blog.csdn ...
- java操作properties文件简单学习
java操作properties文件的工具类简单封装: 注意:由于本地和环境和linux服务的路径有区别,或者jetty,resin,tomcat部署后,文件的路径也是有区别的.比如我们在linux上 ...
- JAVA操作xml文件
参考:java操作xml方法,总有适合你的 XML技术在Java开发中的应用 1.简介 xml: extensible Markup Language 1.1使用场景: 不同的系统之间交互时使用xml ...
最新文章
- oralce rollup 小计合计_总计与小计–WITH ROLLUP
- IT人应该具备的几种技能
- DiskLruCache 源码解析
- 307 跳转会携带请求方法吗_面试官:GET和POST两种基本请求方法有什么区别
- mysql在线搭建从库_Mysql主从库搭建
- python requests库api_python利用requests库进行接口测试的方法详解
- react dispatch_记 react 项目在 TypeScript 化中的一个坑,以及相应的类型改动
- redis集群五种模式(纯概念)
- eclipse缺少org.apache.http.legacy的解决办法
- matlab 8点fft蝶形图,FFT快速傅里叶变换(蝶形算法)详解精要.ppt
- 电感耦合等离子体发射光谱法测定水样中的金属含量
- SlideShow Pro(幻灯片制作)v5.0.0.10绿色中文版
- 落日余晖,listview快速编写
- 管理类研究生MBA、MPA、MEM、MPAcc
- 再次出发!FaceBook 开源“一站式服务“时序利器 Kats !
- 数据预处理:分类和顺序变量转化为数值型数据
- 手机高速访问an web方法
- Valid Palindrome
- SOCKET编程的详细电子文档
- 数据结构和算法 第二小题 九宫重排(1)