Java實現多檔案邊壓縮邊下載
思路:一邊壓縮一邊下載,將多個檔案逐一寫入到壓縮檔案中
@ResponseBody @GetMapping("/download") public void downloadFiles(HttpServletRequest request, HttpServletResponse response){ /* * test * */ List<String> list = new ArrayList<>(); list.add("F:\\1\\test\\2\\1.exe"); list.add("F:\\1\\test\\2\\2.exe"); list.add("F:\\1\\test\\2\\3.exe"); //響應頭的設定 response.reset(); response.setCharacterEncoding("utf-8"); response.setContentType("application/octet-stream;charset=utf-8");// 設定response內容的型別 //設定壓縮包的名字 //解決不同瀏覽器壓縮包名字含有中文時亂碼的問題 String downloadName = "test.zip"; String agent = request.getHeader("USER-AGENT"); ZipOutputStream zipos = null; //迴圈將檔案寫入壓縮流 DataOutputStream os = null; try { if (agent.contains("MSIE")||agent.contains("Trident")) { downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8"); } else { downloadName = new String(downloadName.getBytes("UTF-8"),"ISO-8859-1"); } response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\""); //設定壓縮流:直接寫入response,實現邊壓縮邊下載 zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream())); zipos.setMethod(ZipOutputStream.DEFLATED); //設定壓縮方法 for(int i = 0; i < list.size(); i++ ){ InputStream is = null; try{ File file = new File(list.get(i)); if(file.exists()){ //新增ZipEntry,並ZipEntry中寫入檔案流 //這裡,加上i是防止要下載的檔案有重名的導致下載失敗 zipos.putNextEntry(new ZipEntry(i + "_" + file.getName())); os = new DataOutputStream(zipos); is = new FileInputStream(file); byte[] b = new byte[1024]; int length = 0; while((length = is.read(b))!= -1){ os.write(b, 0, length); } } } finally { if(null != is){ is.close(); } zipos.closeEntry(); } } if(null != os){ os.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { //關閉流 try { if(null != os){ os.close(); } if(null != zipos){ zipos.close(); } } catch (IOException e) { e.printStackTrace(); } } }
相關文章
- .netcore+vue 實現壓縮檔案下載NetCoreVue
- javaWeb不生成臨時檔案實現壓縮檔案下載JavaWeb
- ZIP 也能邊下載邊解壓?流式解壓技術揭秘!
- Java實現解壓縮檔案和資料夾Java
- Flutter實現一個邊讀邊處理邊傳送檔案的功能Flutter
- Java多執行緒檔案分片下載實現Java執行緒
- Java實現檔案下載功能Java
- Unity 利用Cache實現邊下邊玩Unity
- 邊下載邊播放的播放器Android邊下邊播播放器Android
- 哈夫曼實現檔案壓縮解壓縮(c語言)C語言
- 檔案壓縮和解壓縮
- Laravel 中建立 Zip 壓縮檔案並提供下載Laravel
- Linux下檔案的壓縮與解壓Linux
- java 生成 zip格式 壓縮檔案Java
- java 把檔案壓縮成 zipJava
- java中檔案如何加密壓縮?Java加密
- java中 檔案壓縮處理Java
- java實現檔案的下載的方法概述Java
- .NET 壓縮/解壓檔案
- gulp壓縮檔案
- Linux 檔案壓縮Linux
- 六邊形架構 Java 實現架構Java
- 影片壓縮技術助力邊防影片監控
- Linux中檔案的壓縮和解壓縮Linux
- Flutter實現檔案下載Flutter
- AJAX實現檔案下載----
- 電腦怎麼壓縮檔案 檔案壓縮方法詳解
- Java實現壓縮資料夾Java
- java 壓縮(解壓)檔案或者資料夾工具類Java
- Python實現壓縮和解壓縮Python
- Mac壓縮檔案怎麼加密?BetterZip加密Word壓縮檔案教程Mac加密
- linux檔案壓縮和解壓命令Linux
- Ubuntu 壓縮檔案命令Ubuntu
- c#壓縮檔案C#
- JAVA檔案下載Java
- 使用Servlet實現檔案下載Servlet
- Flutter 實現檔案下載功能Flutter
- vc實現https檔案下載HTTP