您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關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就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。