Java OSS批量下载并压缩为ZIP代码实例

 更新时间:2019年09月10日 14:57:23   作者:呵呵哒小码农  
这篇文章主要介绍了Java OSS批量下载并压缩为ZIP代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了Java OSS批量下载并压缩为ZIP代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

/**
   * 批量下载为zip
   * @param req
   * @param response
   * @param keyList oss文件路径集合
   * @param fileName 下载出来的zip文件名(一般以合同名命名) 如:测试合同,zip
   */
  public static void downForZip(HttpServletRequest req, HttpServletResponse response,
                  List<String> keyList,String fileName ){
    // 创建临时文件
    File zipFile = null;
    try {<br data-filtered="filtered">        //临时文件名称
      zipFile = File.createTempFile("test", ".zip");
 
      FileOutputStream f = new FileOutputStream(zipFile);
      /**
       * 作用是为任何OutputStream产生校验和
       * 第一个参数是制定产生校验和的输出流,第二个参数是指定Checksum的类型 (Adler32(较快)和CRC32两种)
       */
      CheckedOutputStream csum = new CheckedOutputStream(f, new Adler32());
      // 用于将数据压缩成Zip文件格式
      ZipOutputStream zos = new ZipOutputStream(csum);
      OSSClient ossClient= OSSUtil.getInstance();
      for (String ossFile : keyList) {
        // 获取Object,返回结果为OSSObject对象
 
        OSSObject ossObject = ossClient.getObject(OSSUtil.BUCKET, ossFile);
        // 读去Object内容 返回
        InputStream inputStream = ossObject.getObjectContent();
        // 对于每一个要被存放到压缩包的文件,都必须调用ZipOutputStream对象的putNextEntry()方法,确保压缩包里面文件不同名
        String name=ossFile.substring(ossFile.lastIndexOf("/")+1);
        zos.putNextEntry(new ZipEntry(name));
        int bytesRead = 0;
        // 向压缩文件中输出数据
        while ((bytesRead = inputStream.read()) != -1) {
          zos.write(bytesRead);
        }
        inputStream.close();
        zos.closeEntry(); // 当前文件写完,定位为写入下一条项目
      }
      zos.close();
      String header = req.getHeader("User-Agent").toUpperCase();
      if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {
        fileName = URLEncoder.encode(fileName, "utf-8");
        //IE下载文件名空格变+号问题
        fileName = fileName.replace("+", "%20");
      } else {
        fileName = new String(fileName.getBytes(), "ISO8859-1");
      }
      response.reset();
      response.setContentType("text/plain");
      response.setContentType("application/octet-stream; charset=utf-8");
      response.setHeader("Location", fileName);
      response.setHeader("Cache-Control", "max-age=0");
      response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
 
      FileInputStream fis = new FileInputStream(zipFile);
      BufferedInputStream buff = new BufferedInputStream(fis);
      BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
      byte[] car = new byte[1024];
      int l = 0;
      while (l < zipFile.length()) {
        int j = buff.read(car, 0, 1024);
        l += j;
        out.write(car, 0, j);
      }
      // 关闭流
      fis.close();
      buff.close();
      out.close();
      ossClient.shutdown();
      // 删除临时文件
      zipFile.delete();
    } catch (IOException e1) {
      e1.printStackTrace();
    }catch (Exception e) {
      e.printStackTrace();
    }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java工厂模式用法之如何动态选择对象详解

    Java工厂模式用法之如何动态选择对象详解

    工厂设计模式可能是最常用的设计模式之一,我想大家在自己的项目中都用到过。本文不仅仅是关于工厂模式的基本知识,更是讨论如何在运行时动态选择不同的方法进行执行,你们可以看看是不是和你们项目中用的一样
    2023-03-03
  • Java中Maven Shade插件的具体使用

    Java中Maven Shade插件的具体使用

    Maven Shade插件它可以帮助你在构建项目时打包所有依赖项,并将其打包到一个单独的JAR文件中,本文就介绍一下Maven Shade插件的具体使用,具有一定参考价值,感兴趣的可以了解一下
    2023-08-08
  • java接口Array介绍

    java接口Array介绍

    这篇文章主要介绍了java接口Array的相关资料,需要的朋友可以参考下
    2014-10-10
  • java生成缩略图的方法示例

    java生成缩略图的方法示例

    这篇文章主要介绍了java生成缩略图的方法,结合具体实例形式分析了java生成缩略图过程中所涉及的各种常见的图形处理技巧,需要的朋友可以参考下
    2017-03-03
  • Java校验是否为连续的区间问题

    Java校验是否为连续的区间问题

    这篇文章主要介绍了Java校验是否为连续的区间问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • java项目jar包与jdk的版本不兼容的问题解决

    java项目jar包与jdk的版本不兼容的问题解决

    这篇文章主要介绍了java项目jar包与jdk的版本不兼容的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • spring-@Autowired注入与构造函数注入使用方式

    spring-@Autowired注入与构造函数注入使用方式

    这篇文章主要介绍了spring-@Autowired注入与构造函数注入使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 每天学Java!一分钟了解JRE与JDK

    每天学Java!一分钟了解JRE与JDK

    每天学Java!一分钟了解JRE与JDK,什么是JRE?什么是JDK?什么是JVM?相信通过本文大家都会有所了解,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Java导出txt文件的方法

    Java导出txt文件的方法

    这篇文章主要介绍了Java导出txt文件的方法,实例分析了两种java导出txt文本文件的使用技巧,需要的朋友可以参考下
    2015-05-05
  • Java并发系列之Semaphore源码分析

    Java并发系列之Semaphore源码分析

    这篇文章主要为大家详细介绍了Java并发系列之Semaphore源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02

最新评论