本文實例為大家分享了javaweb文件打包批量下載,供大家參考,具體內(nèi)容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
// 批量下載未批改作業(yè) @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(); // 根據(jù)作業(yè)ID獲取作業(yè)詳細(xì)信息 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); } // 給每個已提交作業(yè)的學(xué)生配一個map,userName-->AssignmentSubmit Map<String, AssignmentSubmit> studentSubmitMap = new HashMap<String, AssignmentSubmit>(); for (AssignmentSubmit assignmentSubmit : assignmentSubmits) { String studentID = assignmentSubmit.getUserName(); studentSubmitMap.put(studentID, assignmentSubmit); } // 根據(jù)班級號獲取該班所有學(xué)生的學(xué)號,再根據(jù)學(xué)號獲取詳情列表 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() // 創(chuàng)建文件輸出流 FileOutputStream fous = new FileOutputStream(file); // 打包的方法我們會用到ZipOutputStream這樣一個輸出流, 所以這里我們把輸出流轉(zhuǎn)換一下 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(); // 獲取遠(yuǎn)程文件的文件名。 // 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方法進(jìn)行處理 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/ 老司機(jī)技術(shù)手冊
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。