网站建设资讯

NEWS

网站建设资讯

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

这篇文章将为大家详细讲解有关Java中怎么利用OSS批量下载并压缩为ZIP,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

10多年的南谯网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销的优势是能够根据用户设备显示端的尺寸不同,自动调整南谯建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“南谯网站设计”,“南谯网站推广”以来,每个客户项目都认真落实执行。

/**
   * 批量下载为zip
   * @param req
   * @param response
   * @param keyList oss文件路径集合
   * @param fileName 下载出来的zip文件名(一般以合同名命名) 如:测试合同,zip
   */
  public static void downForZip(HttpServletRequest req, HttpServletResponse response,
                  List keyList,String fileName ){
    // 创建临时文件
    File zipFile = null;
    try {        //临时文件名称
      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就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


标题名称:Java中怎么利用OSS批量下载并压缩为ZIP
本文网址:http://cdweb.net/article/iecoid.html