javaWeb不生成臨時檔案實現壓縮檔案下載
談起壓縮檔案的下載,我們可能會想到先生成壓縮檔案到伺服器,然後再從伺服器讀取壓縮檔案流,然後實現下載功能。但往往我們有時候不需要伺服器上儲存生成的臨時物理檔案(因為這樣會很浪費資源嗎),那麼我們該如何實現呢?下面阿燈就給大家分享一個簡單的實現demo思路吧。
1、讀取或生成需要放進壓縮包中的檔案內容。
2、使用ZipOutputStream在記憶體中生成壓縮檔案流。
3、將生成的壓縮流放進response的輸出流中,最終實現下載。
示例程式碼如下:
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("zip")
public void downLoadZip(HttpServletResponse response) throws Exception {
//需要讀取檔案的完整路徑
String filePath ="E:\\test\\download.docx";
//建立ByteArrayOutputStream 儲存壓縮流,後期用於讀出壓縮檔案流內容
ByteArrayOutputStream bos = new ByteArrayOutputStream();
/**
* 建立ZipOutputStream 用於生成壓縮檔案流
* 這裡為什麼用ByteArrayOutputStream物件構造ZipOutputStream
* 翻看ZipOutputStream建構函式的原始碼,你會發現
* ZipOutputStream(OutputStream out) out引數的註釋為
* out引數的註釋為 the actual output stream
* 也就是說out物件是壓縮檔案的實際輸出流
*/
ZipOutputStream zos = new ZipOutputStream(bos);
//建立壓縮檔案內容例項,這裡我就建立一個,
// 如果大家需要建立多個可多次putNextEntry
zos.putNextEntry(new ZipEntry("download.docx"));
//讀取檔案內容,並將檔案內容放到壓縮流中
FileInputStream fis = new FileInputStream(filePath);
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) > 0) {
System.out.println(new String(buffer));
zos.write(buffer, 0, len);
}
//關閉流
fis.close();
zos.close(); //切記要先關閉流,不然後續無法獲取壓縮流內容
//獲取壓縮位元組流,到這裡就明白為什麼使用ByteArrayOutputStream構造ZipOutputStream了吧
byte[] zipBytes = bos.toByteArray();
//下面就是下載的那一套了
response.setCharacterEncoding("UTF-8");
response.setContentType("application/x-msdownload");
String filename = new String("壓縮檔案下載.zip".getBytes(),"ISO8859-1");
response.addHeader("Content-Disposition","attachment;filename=" + filename);
/**
* 由於需要向響應體中放入位元組流 所以要放入response.getOutputStream();
* 千萬不要習慣性的使用response.getWriter()哦
*/
ServletOutputStream servletOutputStream = response.getOutputStream();
servletOutputStream.write(zipBytes);
servletOutputStream.close();
}
}
上述程式碼示例註釋已經很清楚了,相信看完程式碼的你,思路已經很明確了吧!
當然,上述僅僅是寫了個簡單的demo,具體實現和優化還需要大家自行完成,
有了清晰的思路,還擔心搞不定嗎?,
個人感覺在程式中,有了清晰的思路,實現起來,一切都風雨無阻了。
朋友們,擼起袖子,幹吧!
掃描或長按下方二維碼關注公眾號
持久關注阿燈的動態
相關文章
- .netcore+vue 實現壓縮檔案下載NetCoreVue
- Java實現多檔案邊壓縮邊下載Java
- 2020JavaWeb實現檔案下載JavaWeb
- java 生成 zip格式 壓縮檔案Java
- JavaWeb之實現檔案上傳與下載工具JavaWeb
- JavaWeb之實現檔案上傳與下載元件JavaWeb元件
- JavaWeb之實現檔案上傳與下載示例JavaWeb
- 檔案壓縮和解壓縮
- JavaWeb之實現檔案上傳與下載外掛JavaWeb
- JavaWeb之實現檔案上傳與下載原始碼JavaWeb原始碼
- JavaWeb之實現檔案上傳與下載例項JavaWeb
- Linux下檔案的壓縮與解壓Linux
- Linux 檔案壓縮Linux
- gulp壓縮檔案
- Laravel 中建立 Zip 壓縮檔案並提供下載Laravel
- 哈夫曼實現檔案壓縮解壓縮(c語言)C語言
- 電腦怎麼壓縮檔案 檔案壓縮方法詳解
- JavaWeb之實現檔案上傳與下載控制元件JavaWeb控制元件
- 將bmp檔案壓縮為jpg檔案
- .NET 壓縮/解壓檔案
- Flutter實現檔案下載Flutter
- AJAX實現檔案下載----
- Mac壓縮檔案怎麼加密?BetterZip加密Word壓縮檔案教程Mac加密
- Ubuntu 壓縮檔案命令Ubuntu
- c#壓縮檔案C#
- Linux中檔案的壓縮和解壓縮Linux
- Java實現解壓縮檔案和資料夾Java
- linux檔案壓縮和解壓命令Linux
- Linux shell mktemp -d命令生成臨時檔案Linux
- 使用Servlet實現檔案下載Servlet
- Flutter 實現檔案下載功能Flutter
- vc實現https檔案下載HTTP
- Java實現檔案下載功能Java
- vue/js實現檔案流下載,檔案下載進度監聽VueJS
- node ~ zip壓縮 && 檔案加密加密
- C# 壓縮PDF檔案C#
- betterzip怎麼解壓檔案?如何使用BetterZip批次解壓壓縮檔案
- linux 下面壓縮、解壓.rar檔案Linux