pom.xmlapache
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.18</version> </dependency>
//將磁盤的多個文件打包成壓縮包並輸出流下載 @GetMapping(value = "/download1") public void download1(HttpServletRequest request, HttpServletResponse response) throws Exception { String outputFileName = "文件" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".zip"; // 設置response參數 response.reset(); response.setContentType("content-type:octet-stream;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + new String((outputFileName).getBytes(), "iso-8859-1")); ServletOutputStream out = response.getOutputStream(); ZipArchiveOutputStream zous = new ZipArchiveOutputStream(out); zous.setUseZip64(Zip64Mode.AsNeeded); File f1 = new File("D:\\testfile\\aaa.png"); File f2 = new File("D:\\testfile\\bbb.png"); List<File> fileList = new ArrayList<>(); fileList.add(f1); fileList.add(f2); for (File file : fileList) { String fileName = file.getName(); InputStream inputStream = new FileInputStream(file); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) != -1) { baos.write(buffer, 0, len); } if (baos != null) { baos.flush(); } byte[] bytes = baos.toByteArray(); //設置文件名 ArchiveEntry entry = new ZipArchiveEntry(fileName); zous.putArchiveEntry(entry); zous.write(bytes); zous.closeArchiveEntry(); if (baos != null) { baos.close(); } } if(zous!=null) { zous.close(); } } //將網絡url資源文件的多個文件打包成壓縮包並輸出流下載 @GetMapping(value = "/download2") public void download2(HttpServletRequest request, HttpServletResponse response) throws Exception { String outputFileName = "文件" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".zip"; // 設置response參數 response.reset(); response.setContentType("content-type:octet-stream;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + new String((outputFileName).getBytes(), "iso-8859-1")); ServletOutputStream out = response.getOutputStream(); ZipArchiveOutputStream zous = new ZipArchiveOutputStream(out); zous.setUseZip64(Zip64Mode.AsNeeded); String path1 = "http://www.baidu.com/img/bd_logo1.png"; String path2 = "http://www.baidu.com/img/bd_logo1.png"; List<String> pathList = new ArrayList<>(); pathList.add(path1); pathList.add(path2); for (String path : pathList) { String fileName = UUID.randomUUID() + ".png"; InputStream inputStream = getInputStreamFromUrl(path); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) != -1) { baos.write(buffer, 0, len); } if (baos != null) { baos.flush(); } byte[] bytes = baos.toByteArray(); //設置文件名 ArchiveEntry entry = new ZipArchiveEntry(fileName); zous.putArchiveEntry(entry); zous.write(bytes); zous.closeArchiveEntry(); if (baos != null) { baos.close(); } } if(zous!=null) { zous.close(); } } /** * 經過網絡地址獲取文件InputStream * * @param path 地址 * @return */ public static InputStream getInputStreamFromUrl(String path) { URL url = null; InputStream is = null; try { url = new URL(path); } catch (MalformedURLException e) { e.printStackTrace(); } try { HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); conn.connect(); is = conn.getInputStream(); } catch (IOException e) { e.printStackTrace(); } return is; }