加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 教程 > 正文

JSP 实现多个文件打包下载代码

发布时间:2023-06-17 14:34:00 所属栏目:教程 来源:
导读:如何在jsp中实现多个文件下载相信是很多人都想知道的问题,那么我们现在就一起跟随错新小编的脚步一起去看看JSP 多个文件打包下载代码,感兴趣的朋友们也一起来探讨吧。

现把该程序主要代码贴下,供大家需要的时候
如何在jsp中实现多个文件下载相信是很多人都想知道的问题,那么我们现在就一起跟随错新小编的脚步一起去看看JSP 多个文件打包下载代码,感兴趣的朋友们也一起来探讨吧。
 
现把该程序主要代码贴下,供大家需要的时候参考下:
 
<%@page import="java.util.*,
 
java.net.*,
 
java.text.*,
 
java.util.zip.*,
 
java.io.*" %>
 
<%!
 
static Vector expandFileList(String[] files, boolean inclDirs){
 
Vector v = new Vector();
 
if (files == null) return v;
 
for (int j=0; j < files.length; i++) v.add (new File(URLDecoder.decode(files[j])));
 
for (int i=0; i < v.size(); i++){
 
File f = (File) v.get(i);
 
if (f.isDirectory()){
 
File[] fs = f.listFiles();
 
for (int n = 0; n < fs.length; n++) v.add(fs[n]);
 
if (!inclDirs){
 
v.remove(i);
 
i--;
 
}
 
}
 
}
 
return v;
 
}
 
class Writer2Stream extends OutputStream{
 
Writer out;
 
Writer2Stream (Writer w){
 
super();
 
out = w;
 
}
 
public void write(int i) throws IOException{
 
out.write(i);
 
}
 
public void write(byte[] b) throws IOException{
 
for (int j=0;j<b.length;j++){
 
int n=b[j];
 
//Convert byte to ubyte
 
n=((n>>>4)&0xF)*16+(n&0xF);
 
out.write (n);
 
}
 
}
 
public void write(byte[] b, int off, int len) throws IOException{
 
for (int j = off; j < off + len; j++){
 
int n=b[j];
 
n = ((n>>>4)&0xF)*16+(n&0xF);
 
out.write(n);
 
}
 
}
 
} 
 
%>
 
<%
 
/////下载压缩文件包
 
Vector v = expandFileList(request.getParameterValues("selfile"), false);
 
if (v.size() == 0){
 
request.setAttribute("error", "No files selected");
 
}
 
else{
 
File dir_file = new File(request.getRealPath("") + "/myfile/");
 
int dir_l = dir_file.getAbsolutePath().length();
 
response.setContentType ("application/zip");
 
response.setHeader ("Content-Disposition", "attachment;filename=/"downloadname.rar/"");
 
out.clearBuffer();
 
ZipOutputStream zipout = new ZipOutputStream(new Writer2Stream(out));
 
zipout.setComment("Download selected files /nas one WinRAR file:/ndownloadname.rar");
 
zipout.setLevel(1);
 
for (int i=0;i<v.size();i++){
 
File f = (File)v.get(i);
 
if (f.canRead()){
 
zipout.putNextEntry(new ZipEntry(f.getAbsolutePath().substring(dir_l+1)));
 
BufferedInputStream fr = new BufferedInputStream(new FileInputStream(f));
 
byte buffer[] = new byte[0xffff];
 
int b;
 
while ((b=fr.read())!=-1) zipout.write(b);
 
fr.close();
 
zipout.closeEntry();
 
}
 
}
 
zipout.finish();
 
out.flush();
 
}
 
%>
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!