目录

  • 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文件相关推荐

  1. java 操作Zip文件(压缩、解压、加密)

    java 操作Zip文件(压缩.解压.加密) 依赖:点击下载 package com.zxl.test;import net.lingala.zip4j.model.ZipParameters; im ...

  2. java zip文件操作,java 关于 zip 文件 的 基本操作

    这里用的是appache的包  为了防止文件中文名乱码问题 java 操作 .zip 文件  压缩文件 解压文件 删除文件夹等 package com.gaeainfo.toponymbase.uti ...

  3. 利用java进行zip文件解压缩

    利用java进行zip文件解压缩 本文利用Java的zip包中的ZipFile和ZipEntry两个类,获取到压缩包中的所有文件,并将压缩文件通过InputStream写入一个byte数组,再将该by ...

  4. Python操作Zip文件

    Python操作Zip文件 需要使用到zipfile模块 读取Zip文件 随便一个zip文件,我这里用了bb.zip,就是一个文件夹bb,里面有个文件aa.txt.

  5. Java实现Zip文件解压

    2019独角兽企业重金招聘Python工程师标准>>> ##1. 两种java实现zip文件解压方式 使用JDK的原生类java.util.zip,上代码: import java. ...

  6. JAVA操作属性文件,可进行读 写 更改

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! JAVA ...

  7. Java操作word文件的工具选择

    Java操作word文件的工具选择 使用Java语言,创建doc.docx.excel.pdf等文档,并对文档进行一系列操作. Spire.Doc for Java https://blog.csdn ...

  8. java操作properties文件简单学习

    java操作properties文件的工具类简单封装: 注意:由于本地和环境和linux服务的路径有区别,或者jetty,resin,tomcat部署后,文件的路径也是有区别的.比如我们在linux上 ...

  9. JAVA操作xml文件

    参考:java操作xml方法,总有适合你的 XML技术在Java开发中的应用 1.简介 xml: extensible Markup Language 1.1使用场景: 不同的系统之间交互时使用xml ...

最新文章

  1. oralce rollup 小计合计_总计与小计–WITH ROLLUP
  2. IT人应该具备的几种技能
  3. DiskLruCache 源码解析
  4. 307 跳转会携带请求方法吗_面试官:GET和POST两种基本请求方法有什么区别
  5. mysql在线搭建从库_Mysql主从库搭建
  6. python requests库api_python利用requests库进行接口测试的方法详解
  7. react dispatch_记 react 项目在 TypeScript 化中的一个坑,以及相应的类型改动
  8. redis集群五种模式(纯概念)
  9. eclipse缺少org.apache.http.legacy的解决办法
  10. matlab 8点fft蝶形图,FFT快速傅里叶变换(蝶形算法)详解精要.ppt
  11. 电感耦合等离子体发射光谱法测定水样中的金属含量
  12. SlideShow Pro(幻灯片制作)v5.0.0.10绿色中文版
  13. 落日余晖,listview快速编写
  14. 管理类研究生MBA、MPA、MEM、MPAcc
  15. 再次出发!FaceBook 开源“一站式服务“时序利器 Kats !
  16. 数据预处理:分类和顺序变量转化为数值型数据
  17. 手机高速访问an web方法
  18. Valid Palindrome
  19. SOCKET编程的详细电子文档
  20. 数据结构和算法 第二小题 九宫重排(1)

热门文章

  1. 8051单片机Proteus仿真与开发实例-74HCT4051多路选择器(分配器)驱动仿真
  2. Windows XP SP2之初体验
  3. 「无服务器架构」动手操作Knative -第二部分
  4. ThinkPadE425拆机图
  5. 2020年电力电缆考试技巧及电力电缆作业考试题库
  6. 年度文章集合 | 最全微前端集合【建议收藏】
  7. #小写金额转大写金额
  8. Origin | 设置不同的主次刻度标签
  9. Thinkpad T400 安装Windows 7 指南
  10. Python的起源和发展