Java實現(xiàn)批量下載選中文件功能
更新時間:2017年11月21日 09:45:48 作者:秋分中的雨
這篇文章主要介紹了Java實現(xiàn)批量下載選中文件功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
1.在action中定義變量
private List<String> downLoadPaths = new ArrayList<String>();//存儲選中文件的下載地址 private OutputStream res; private ZipOutputStream zos; private String outPath; private String lessionIdStr;// 選中文件ID拼接的字符串 private String fileName; //瀏覽器下載彈出框中顯示的文件名
分別給出get和set方法
2. 主方法
/** * 下載多個文件:壓縮成zip * * @return * @throws Exception */ public String downLoadLessionsZip() { downLoadPaths.clear(); String firstFileName = "";// 第一個文件的文件名 List<DownLoadFileVo> fileVos = new LinkedList<DownLoadFileVo>(); if (StringUtils.isNotEmpty(lessionIdStr)) { int end = lessionIdStr.lastIndexOf(","); if (end > 0) { if (end == lessionIdStr.length() - 1) { lessionIdStr = lessionIdStr.substring(0, end); } String[] ids = lessionIdStr.split(","); for (int i = 0; i < ids.length; i++) { if (StringUtils.isNumeric(ids[i])) { BkPersonLession lession = bkPersonLessionService.downLoadLession(Integer.parseInt(ids[i])); if (lession != null) { fileVos.add(new DownLoadFileVo(lession .getLessionName(), getContextRealPath() + lession.getLessionSavePath())); downLoadPaths.add(getContextRealPath() + lession.getLessionSavePath()); } if (i == 0) { firstFileName = lession.getLessionName(); } } } } } // 有數(shù)據(jù)可以下載 if (downLoadPaths.size() != 0) { // 進行預(yù)處理 preProcess(firstFileName); } else { // 沒有文件可以下載,返回nodata return "nodata"; } // 處理 writeZip(fileVos); // 后處理關(guān)閉流 afterProcess(); return null; } // 壓縮處理 public void writeZip(List<DownLoadFileVo> fileVos) { byte[] buf = new byte[8192]; int len; for (DownLoadFileVo fileVo : fileVos) { File file = new File(fileVo.getFileSavePath()); if (!file.isFile()) continue; ZipEntry ze = new ZipEntry(fileVo.getFileName() + fileVo.getFileSavePath().substring( fileVo.getFileSavePath().lastIndexOf("."))); try { zos.putNextEntry(ze); BufferedInputStream bis = new BufferedInputStream( new FileInputStream(file)); while ((len = bis.read(buf)) > 0) { zos.write(buf, 0, len); } bis.close(); zos.closeEntry(); } catch (IOException e) { e.printStackTrace(); } } } // 預(yù)處理 public void preProcess(String firseFileName) { String zipName = "【批量下載】" + firseFileName + "等.zip"; String filename = ""; try { filename = new String(zipName.getBytes("GBK"), "8859_1"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } this.fileName = filename; HttpServletResponse response = ServletActionContext.getResponse(); try { res = response.getOutputStream(); // 清空輸出流(在迅雷下載不會出現(xiàn)一長竄) response.reset(); // 設(shè)定輸出文件頭 response.setHeader("Content-Disposition", "attachment;fileName=" + filename); response.setContentType("application/zip"); zos = new ZipOutputStream(res); } catch (IOException e) { e.printStackTrace(); } } // 后處理 public void afterProcess() { try { if (zos != null) { zos.close(); } if (res != null) { res.close(); } } catch (IOException e) { e.printStackTrace(); } }
3. 在struts.xml中配置
<action name="downLoadBkPersonLessionsZip" class="bkPersonLessionAction" method="downLoadLessionsZip">//class值為bean.xml中配置的bean <result name="nodata" type="httpheader"> <param name="status">204</param>//表示響應(yīng)執(zhí)行成功,但沒有數(shù)據(jù)返回,瀏覽器不用刷新,不用導(dǎo)向新頁面 </result> </action>
總結(jié)
以上所述是小編給大家介紹的Java實現(xiàn)批量下載選中文件功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Java實現(xiàn)4種微信搶紅包算法(小結(jié))
微信紅包是大家經(jīng)常使用的,到現(xiàn)在為止仍然有很多紅包開發(fā)的需求,實現(xiàn)搶紅包算法也是面試??碱},本文就詳細(xì)的來介紹一下如何實現(xiàn),感興趣的可以了解一下2021-12-12java多線程編程必備volatile與synchronized深入理解
這篇文章主要介紹了java多線程編程必備volatile與synchronized的深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04Mybatis Generator自動生成對應(yīng)文件的實現(xiàn)方法
這篇文章主要介紹了Mybatis Generator自動生成對應(yīng)的文件的實現(xiàn)方法,需要的朋友可以參考下2017-09-09java中線程的sleep()方法和yield()方法的區(qū)別
本文主要介紹了java中線程的sleep()方法和yield()方法的區(qū)別,Thread類的sleep()方法使線程休眠指定時間,不釋放鎖,而yield()提示調(diào)度器當(dāng)前線程愿意讓出CPU資源,不保證立即切換線程,感興趣的可以了解一下2024-10-10Java實現(xiàn)對字符串中的數(shù)值進行排序操作示例
這篇文章主要介紹了Java實現(xiàn)對字符串中的數(shù)值進行排序操作,涉及java字符串與數(shù)組的相互轉(zhuǎn)換以及數(shù)組排序相關(guān)操作技巧,需要的朋友可以參考下2018-05-05