Java OSS批量下載并壓縮為ZIP代碼實例
更新時間:2019年09月10日 14:57:23 作者:呵呵噠小碼農(nóng)
這篇文章主要介紹了Java OSS批量下載并壓縮為ZIP代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
這篇文章主要介紹了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 ){ // 創(chuàng)建臨時文件 File zipFile = null; try {<br data-filtered="filtered"> //臨時文件名稱 zipFile = File.createTempFile("test", ".zip"); FileOutputStream f = new FileOutputStream(zipFile); /** * 作用是為任何OutputStream產(chǎn)生校驗和 * 第一個參數(shù)是制定產(chǎn)生校驗和的輸出流,第二個參數(shù)是指定Checksum的類型 (Adler32(較快)和CRC32兩種) */ CheckedOutputStream csum = new CheckedOutputStream(f, new Adler32()); // 用于將數(shù)據(jù)壓縮成Zip文件格式 ZipOutputStream zos = new ZipOutputStream(csum); OSSClient ossClient= OSSUtil.getInstance(); for (String ossFile : keyList) { // 獲取Object,返回結(jié)果為OSSObject對象 OSSObject ossObject = ossClient.getObject(OSSUtil.BUCKET, ossFile); // 讀去Object內(nèi)容 返回 InputStream inputStream = ossObject.getObjectContent(); // 對于每一個要被存放到壓縮包的文件,都必須調(diào)用ZipOutputStream對象的putNextEntry()方法,確保壓縮包里面文件不同名 String name=ossFile.substring(ossFile.lastIndexOf("/")+1); zos.putNextEntry(new ZipEntry(name)); int bytesRead = 0; // 向壓縮文件中輸出數(shù)據(jù) 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); } // 關(guān)閉流 fis.close(); buff.close(); out.close(); ossClient.shutdown(); // 刪除臨時文件 zipFile.delete(); } catch (IOException e1) { e1.printStackTrace(); }catch (Exception e) { e.printStackTrace(); } }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java 在volatile內(nèi)部調(diào)用接口的方法
在Java中,volatile?關(guān)鍵字通常用于確保變量的可見性和有序性,而不是用來修飾接口或方法調(diào)用的,這篇文章主要介紹了Java 在volatile內(nèi)部調(diào)用接口的方法,需要的朋友可以參考下2024-07-07SpringBoot3集成SLF4J+logback進行日志記錄的實現(xiàn)
本文主要介紹了SpringBoot3集成SLF4J+logback進行日志記錄的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01java 將jsonarray 轉(zhuǎn)化為對應鍵值的jsonobject方法
下面小編就為大家分享一篇java 將jsonarray 轉(zhuǎn)化為對應鍵值的jsonobject方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03MyBatis環(huán)境資源配置實現(xiàn)代碼詳解
這篇文章主要介紹了MyBatis環(huán)境資源配置實現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08關(guān)于Spring注解@Async引發(fā)其他注解失效的解決
這篇文章主要介紹了關(guān)于Spring注解@Async引發(fā)其他注解失效的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03