Java 批量下載成壓縮包

今天有個需求 就是將選中的文件批量下載成壓縮包。記錄貼

先將文件通過流放入壓縮包

//先new一個文件文件名字隨意
File zipFile = new File("D:/"+str+".zip");
byte[] buf = new byte[1024];
int len;
//在服務器端生成壓縮文件包,然後通過壓縮流將壓縮包流化。
ZipOutputStream zout = new ZipOutputStream(new FileOutputStream(zipFile));
try {
if(fileIds!=null && fileIds.length>0){	
//我是根據fileid查詢文件,而文件是通過二進制存入數據庫
for(String fileId : fileIds){
//這個model裏面有文件src之類的。具體下面會說到
FileModel fileModel = attachmentManageService.loadFileModelByFileId(fileId);
//獲取數據庫裏的二進制數據放入buffer
byte[] buffer = fileModel.getFileBytes();
//zipEntry 是將文件壓縮的方法。然後putNextEntry是打開剛纔的壓縮文件吧。zont相當於流化的對象
zout.putNextEntry(new ZipEntry(fileModel.getFileName()));  
//將剛纔的文件寫入壓縮包
zout.write(buffer);  
//關閉壓縮包
zout.closeEntry();   
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//關閉壓縮對象流
zout.close();
}
        

下面就是用戶下載剛纔的壓縮包。彈出另存爲下載

//接剛纔的代碼。這個是讀取服務器上生成的壓縮包的文件放入流
FileInputStream zipInput =new FileInputStream(zipFile);
//輸出流獲取response裏的對象
OutputStream out = new BufferedOutputStream(response.getOutputStream());
//設置傳輸的類型,文件類型,可以彈出另存爲。其他的type沒研究過
response.setContentType("multipart/form-data"); 
//設置頭下載的文件名自定義和程序無關,就是下載的文件的名字提用戶先起好的壓縮包名
response.setHeader("Content-Disposition", "attachment; filename="+zipFile.getName());
try {
//輸出
while ((len=zipInput.read(buf))!= -1){  
out.write(buf,0,len);  
}
} catch (Exception e) {
e.printStackTrace();
}finally {
zipInput.close();
out.flush();
out.close();
}
//用戶下載完成後。刪除服務器端的壓縮文件。
zipFile.delete();

主要就是給用戶壓縮的過程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章