JSF Primefaces元件 實現多檔案打包下載
阿新 • • 發佈:2018-12-17
一、前臺元件 <p:commandButton value=“下載” ajax=“false” actionListener="#{shrbeianxxAction.download()}" onclick=“PrimeFaces.monitorDownload(start, stop);” icon=“ui-icon-arrowthick-1-s”> <p:fileDownload value="#{shrbeianxxAction.zipFile}" </p:commandButton>
二、繫結action中設定zipFile屬性 和 download()方法,點選按鈕首先執行download方法給zipFile賦值,然後執行下載
這是呼叫的方法 public static void zipFiles(List srcFiles, File zipFile) { // 判斷壓縮後的檔案存在不,不存在則建立 if (!zipFile.exists()) { try { zipFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } // 建立 FileOutputStream 物件 FileOutputStream fileOutputStream = null; // 建立 ZipOutputStream ZipOutputStream zipOutputStream = null; // 建立 FileInputStream 物件 FileInputStream fileInputStream = null;
try { // 例項化 FileOutputStream 物件 fileOutputStream = new FileOutputStream(zipFile); // 例項化 ZipOutputStream 物件 zipOutputStream = new ZipOutputStream(fileOutputStream); // 建立 ZipEntry 物件 ZipEntry zipEntry = null; // 遍歷原始檔陣列 for (File file : srcFiles) { // 將原始檔中的當前檔案讀入 FileInputStream 流中 fileInputStream = new FileInputStream(file); // 例項化 ZipEntry 物件,原始檔陣列中的當前檔案 zipEntry = new ZipEntry(file.getName()); zipOutputStream.putNextEntry(zipEntry); // 該變數記錄每次真正讀的位元組個數 int len; // 定義每次讀取的位元組陣列 byte[] buffer = new byte[1024]; while ((len = fileInputStream.read(buffer)) > 0) { zipOutputStream.write(buffer, 0, len); } } zipOutputStream.closeEntry(); zipOutputStream.close(); fileInputStream.close(); fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } }