您好,登錄后才能下訂單哦!
這篇文章主要介紹如何使用SpringBoot將文件打包成zip存放或導出,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
其實也沒什么準備,準備好Springboot就行,還有幾張圖片:
代碼
Controller代碼:
@RequestMapping("/zip") @RestController public class ZipController { /** * 將文件打包成zip并存放在特定位置 */ @PostMapping("package") public void packageFileToZip() throws IOException { // 為了方便我直接將文件地址寫好了,各位可以根據自己的情況修改 String[] filePath = new String[]{"E:\\ykds\\1068128498917799516.jpg", "E:\\ykds\\1068128498917917980.jpg", "E:\\ykds\\1068128498917807874.jpg"}; // 將需要打包的文件都放在一個集合中 List<File> fileList = new ArrayList<>(); for (String s : filePath) { File file = new File(s); fileList.add(file); } // 先在D盤創建一個壓縮包 File zipFile = new File("D:\\package.zip"); if(!zipFile.exists()) zipFile.createNewFile(); // 將package.zip的File對象傳到toZip對象中 ZipUtils.toZip(fileList, zipFile); } }
ZipUTils工具類代碼
public class ZipUtils { /** * 把文件集合打成zip壓縮包 * @param srcFiles 壓縮文件集合 * @param zipFile zip文件名 * @throws RuntimeException 異常 */ public static void toZip(List<File> srcFiles, File zipFile) throws IOException { if(zipFile == null){ return; } if(!zipFile.getName().endsWith(".zip")){ return; } ZipOutputStream zos = null; FileOutputStream out = new FileOutputStream(zipFile); try { zos = new ZipOutputStream(out); for (File srcFile : srcFiles) { byte[] buf = new byte[BUFFER_SIZE]; zos.putNextEntry(new ZipEntry(srcFile.getName())); int len; // 讀取文件并寫入到zip中 FileInputStream in = new FileInputStream(srcFile); while ((len = in.read(buf)) != -1) { zos.write(buf, 0, len); zos.flush(); } in.close(); } } catch (Exception e) { e.printStackTrace(); }finally { if (zos != null) { zos.close(); } } } }
代碼打好了,接下來測試下,打開熟悉的postman:
調用接口后就會在D盤中新建一個package.zip的壓縮包:
可以看到,我打包的文件都在這里,再看看能不能正常顯示:
very good!
上面的方法只是將壓縮包保存在本地,如果需要導出的話代碼有點不一樣。
代碼
Controller代碼:
/** * 將文件打包成zip并下載 */ @PostMapping("download") public void download(HttpServletResponse response) throws IOException { // 這里還是和上面一樣 String[] filePath = new String[]{"E:\\ykds\\1068128498917799516.jpg", "E:\\ykds\\1068128498917917980.jpg", "E:\\ykds\\1068128498917807874.jpg"}; List<File> fileList = new ArrayList<>(); for (String s : filePath) { File file = new File(s); fileList.add(file); } response.setHeader("content-type", "application/octet-stream"); response.setContentType("application/octet-stream"); response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=download.zip"); ZipUtils.downloadZip(response.getOutputStream(), fileList); }
ZipUtils工具類代碼
public static void downloadZip(OutputStream outputStream, List<File> fileList){ BufferedInputStream bufferedInputStream = null; ZipOutputStream zipOutputStream = null; try { zipOutputStream = new ZipOutputStream(outputStream); for (File file : fileList) { ZipEntry zipEntry = new ZipEntry(file.getName()); zipOutputStream.putNextEntry(zipEntry); byte[] buf = new byte[BUFFER_SIZE]; int len; FileInputStream in = new FileInputStream(file); while ((len = in.read(buf)) != -1) { zipOutputStream.write(buf, 0, len); zipOutputStream.flush(); } } zipOutputStream.flush(); zipOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } finally { // 關閉流 try { if (bufferedInputStream != null) { bufferedInputStream.close(); } if (zipOutputStream != null ) { zipOutputStream.close(); } if (outputStream != null) { outputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } }
測試
還是用postman:
下載完成后打開看看
以上是“如何使用SpringBoot將文件打包成zip存放或導出”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。