本文实例为大家分享了javaweb文件打包批量下载,供大家参考,具体内容如下
// 批量下载未批改作业
@requestmapping(value = "/downloadallhomework", method = requestmethod.get)
public void downloadallhomework(httpsession httpsession, httpservletrequest request, httpservletresponse response, string assignmentid, int classcode) throws exception {
site site = (site) httpsession.getattribute("site");
string siteid = site.getid();
// 根据作业id获取作业详细信息
assignmentdetail assignmentdetail = assignmentservicews.getassignmentdetail(assignmentid);
generateparameters(assignmentdetail);
// 信息不完整,后面需要填充。
list assignmentsubmitlist = assignmentservicews.getsubmitedassignmentstudent(assignmentid);
// 获取所有的submitid
list submitids = new arraylist();
for (int i = 0; i < assignmentsubmitlist.size(); i++) {
string submitid = assignmentsubmitlist.get(i).getid();
if (submitid == null || submitid == "")
continue;
submitids.add(submitid);
}
// 获取提交详情
list assignmentsubmits = new arraylist();
for (string a : submitids) {
assignmentsubmit as = assignmentservicews.getsubmitassignment(a);
assignmentsubmits.add(as);
}
// 给每个已提交作业的学生配一个map,username-->assignmentsubmit
map studentsubmitmap = new hashmap();
for (assignmentsubmit assignmentsubmit : assignmentsubmits) {
string studentid = assignmentsubmit.getusername();
studentsubmitmap.put(studentid, assignmentsubmit);
}
// 根据班级号获取该班所有学生的学号,再根据学号获取详情列表
list assignmentstudentlist = new arraylist();
list studentlist = memberservicews.getstudents(siteid, classcode);
for (membervo student : studentlist) {
string username = student.getid();
string realname = student.getname();
assignmentsubmit assignmentsubmit = new assignmentsubmit();
if (studentsubmitmap.get(username) != null) {
assignmentsubmit = studentsubmitmap.get(username);
}
assignmentsubmit.setrealname(realname);
assignmentsubmit.setusername(username);
generatea(assignmentsubmit);
assignmentstudentlist.add(assignmentsubmit);
}
list submitedlist = new arraylist();
for (assignmentsubmit as : assignmentstudentlist) {
if (as.getgradepoint() == null && as.getassignmentid() != null)
submitedlist.add(as);
}
list files = new arraylist();
file file = new file("d:/css.rar");
if (!file.exists()) {
file.createnewfile();
}
response.reset();
// response.getwriter()
// 创建文件输出流
fileoutputstream fous = new fileoutputstream(file);
// 打包的方法我们会用到zipoutputstream这样一个输出流, 所以这里我们把输出流转换一下
zipoutputstream zipout = new zipoutputstream(fous);
for (assignmentsubmit a : submitedlist) {
for (attachids aa : a.getattachids()) {
try {
string fileid = aa.getid();
string cloudfileurl = "http://xxx.xxx.xxx.xxx:8066/imageservice/downloadfile/";
string fileurl = announceservice.getattachmentbyfileid(fileid).geturlupload();
fileurl = fileurl.substring(fileurl.lastindexof("/") + 1);
fileurl = cloudfileurl + fileurl;
string filename = announceservice.getattachmentbyfileid(fileid).getname(); // 获取远程文件的文件名。
// response.addheader("content-disposition", "attachment;filename=" +
// new string(filename.getbytes("gbk"), "iso-8859-1"));
// iso-8859-1
zipentry entry = new zipentry(new string(filename.getbytes("gbk"), "iso-8859-1"));
zipout.putnextentry(entry);
url urlfile = null;
httpurlconnection httpurl = null;
urlfile = new url(fileurl);
httpurl = (httpurlconnection) urlfile.openconnection();
httpurl.connect();
inputstream downloadfile = httpurl.getinputstream();
int len = 0;
byte[] buf = new byte[1024];
while ((len = downloadfile.read(buf, 0, 1024)) != -1) {
zipout.write(buf, 0, len);
}
} catch (jsonexception e) {
e.printstacktrace();
} catch (unsupportedencodingexception e) {
e.printstacktrace();
}
}
}
zipout.close();
fous.close();
downloadzip(file, response);
}
// 把接受的全部文件打成压缩包
public static httpservletresponse downloadzip(file file, httpservletresponse response) {
try {
// 以流的形式下载文件。
inputstream fis = new bufferedinputstream(new fileinputstream(file.getpath()));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
outputstream toclient = new bufferedoutputstream(response.getoutputstream());
response.setcontenttype("application/octet-stream");
// 如果输出的是中文名的文件,在此处就要用urlencoder.encode方法进行处理
response.setheader("content-disposition", "attachment;filename=" + urlencoder.encode(file.getname(), "utf-8"));
toclient.write(buffer);
toclient.flush();
toclient.close();
} catch (ioexception ex) {
ex.printstacktrace();
} finally {
try {
file f = new file(file.getpath());
f.delete();
} catch (exception e) {
e.printstacktrace();
}
}
return response;
}
博客地址!http://oldriver.top/ 老司机技术手册
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!