Java实现批量下载选中文件功能
程序员文章站
2024-04-01 19:26:28
1.在action中定义变量
private list downloadpaths = new arraylist
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(); } } } } } // 有数据可以下载 if (downloadpaths.size() != 0) { // 进行预处理 preprocess(firstfilename); } else { // 没有文件可以下载,返回nodata return "nodata"; } // 处理 writezip(filevos); // 后处理关闭流 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(); } } } // 预处理 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(); // 清空输出流(在迅雷下载不会出现一长窜) response.reset(); // 设定输出文件头 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>//表示响应执行成功,但没有数据返回,浏览器不用刷新,不用导向新页面 </result> </action>
总结
以上所述是小编给大家介绍的java实现批量下载选中文件功能,希望对大家有所帮助
上一篇: Java单例模式简单介绍
下一篇: Java自动拆装箱简单介绍