Java中怎么利用OSS批量下载并压缩为ZIP

发布时间:2021-06-11 15:56:09 作者:Leah
来源:亿速云 阅读:1392

这篇文章将为大家详细讲解有关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中怎么利用OSS批量下载并压缩为ZIP就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. 以ZipOutputStream实现文件压缩为Zip包
  2. java中zip压缩出现乱码怎么解决

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java oss

上一篇:springboot中要如何自定义Starter

下一篇:SpringBoot中如何整合Dubbo

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》