Java OSS批量下載并壓縮為ZIP代碼實例
更新時間:2019年09月10日 14:57:23 作者:呵呵噠小碼農(nóng)
這篇文章主要介紹了Java OSS批量下載并壓縮為ZIP代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
這篇文章主要介紹了Java OSS批量下載并壓縮為ZIP代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
/**
* 批量下載為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(); // 當(dāng)前文件寫完,定位為寫入下一條項目
}
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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring不能注入Static變量的原因及Spring注入靜態(tài)變量
這篇文章主要介紹了Spring不能注入Static變量的原因及Spring注入靜態(tài)變量,需要的朋友可以參考下2016-01-01
SpringBoot整合redis中的JSON序列化文件夾操作小結(jié)
在我們?nèi)粘5捻椖块_發(fā)中,使用redis作為緩存,來提高系統(tǒng)訪問速度和緩解系統(tǒng)壓力,在使用中遇到幾個問題,本文給大家詳細(xì)總結(jié)下,對SpringBoot整合redis?JSON序列化相關(guān)知識感興趣的朋友一起看看吧2022-02-02
Java實現(xiàn)的可選擇及拖拽圖片的面板功能【基于swing組件】
這篇文章主要介紹了Java實現(xiàn)的可選擇及拖拽圖片的面板功能,涉及java基于swing組件選擇與操作圖片元素的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2018-01-01
打開IDEA配置Spring項目時發(fā)現(xiàn)沒有選擇java?1.8的選項解決方案
這篇文章主要介紹了打開IDEA配置Spring項目時發(fā)現(xiàn)沒有選擇java?1.8的選項的解決方案,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者idea具有一定的參考借鑒價值,需要的朋友可以參考下2025-03-03

