小編給大家分享一下Java實(shí)現(xiàn)批量下載選中文件功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國(guó)際域名空間、雅安服務(wù)器托管、營(yíng)銷軟件、網(wǎng)站建設(shè)、臨海網(wǎng)站維護(hù)、網(wǎng)站推廣。
1.在action中定義變量
private ListdownLoadPaths = new ArrayList ();//存儲(chǔ)選中文件的下載地址 private OutputStream res; private ZipOutputStream zos; private String outPath; private String lessionIdStr;// 選中文件ID拼接的字符串 private String fileName; //瀏覽器下載彈出框中顯示的文件名
分別給出get和set方法
2. 主方法
/** * 下載多個(gè)文件:壓縮成zip * * @return * @throws Exception */ public String downLoadLessionsZip() { downLoadPaths.clear(); String firstFileName = "";// 第一個(gè)文件的文件名 ListfileVos = new LinkedList (); 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) { // 進(jìn)行預(yù)處理 preProcess(firstFileName); } else { // 沒(méi)有文件可以下載,返回nodata return "nodata"; } // 處理 writeZip(fileVos); // 后處理關(guān)閉流 afterProcess(); return null; } // 壓縮處理 public void writeZip(List 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(); // 清空輸出流(在迅雷下載不會(huì)出現(xiàn)一長(zhǎng)竄) 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中配置
//class值為bean.xml中配置的bean 204//表示響應(yīng)執(zhí)行成功,但沒(méi)有數(shù)據(jù)返回,瀏覽器不用刷新,不用導(dǎo)向新頁(yè)面
用到的jar包
以上是“Java實(shí)現(xiàn)批量下載選中文件功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!