欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javaweb文件打包批量下载代码

程序员文章站 2024-03-13 08:21:09
本文实例为大家分享了javaweb文件打包批量下载,供大家参考,具体内容如下 // 批量下载未批改作业 @requestmapping(value = "/d...

本文实例为大家分享了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<assignmentsubmit> assignmentsubmitlist = assignmentservicews.getsubmitedassignmentstudent(assignmentid);

  // 获取所有的submitid
  list<string> submitids = new arraylist<string>();
  for (int i = 0; i < assignmentsubmitlist.size(); i++) {
   string submitid = assignmentsubmitlist.get(i).getid();
   if (submitid == null || submitid == "")
    continue;
   submitids.add(submitid);
  }
  // 获取提交详情
  list<assignmentsubmit> assignmentsubmits = new arraylist<assignmentsubmit>();
  for (string a : submitids) {
   assignmentsubmit as = assignmentservicews.getsubmitassignment(a);
   assignmentsubmits.add(as);
  }
  // 给每个已提交作业的学生配一个map,username-->assignmentsubmit
  map<string, assignmentsubmit> studentsubmitmap = new hashmap<string, assignmentsubmit>();
  for (assignmentsubmit assignmentsubmit : assignmentsubmits) {
   string studentid = assignmentsubmit.getusername();
   studentsubmitmap.put(studentid, assignmentsubmit);
  }
  // 根据班级号获取该班所有学生的学号,再根据学号获取详情列表
  list<assignmentsubmit> assignmentstudentlist = new arraylist<assignmentsubmit>();

  list<membervo> 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<assignmentsubmit> submitedlist = new arraylist<assignmentsubmit>();
  for (assignmentsubmit as : assignmentstudentlist) {
   if (as.getgradepoint() == null && as.getassignmentid() != null)
    submitedlist.add(as);
  }

  list<file> files = new arraylist<file>();

  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/ 老司机技术手册

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。