欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

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

时间:2021-05-12 09:12:20|栏目:JAVA代码|点击:

这篇文章主要介绍了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 8实现任意参数的单链表

栏    目:JAVA代码

下一篇:永久解决idea git log乱码的问题

本文标题:Java OSS批量下载并压缩为ZIP代码实例

本文地址:http://www.codeinn.net/misctech/120104.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有