首页 > 编程 > Java > 正文

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

2019-11-26 08:36:07
字体:
来源:转载
供稿:网友

这篇文章主要介绍了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();    }  }

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表