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 {
        //臨時文件名稱 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(); } }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM