/** * @Title: exportZip * @Description:TODO(导出建压缩文件) * @param delAdviceinfo 为项目实体类 * @date 2018年4月4日 下午2:36:41 * @param response * */ public void exportZip(DelAdviceinfo delAdviceinfo, HttpServletResponse response) { OutputStream os = null; ZipOutputStream zos = null; try { os = response.getOutputStream(); zos = new ZipOutputStream(os); String realpath = request.getSession().getServletContext().getRealPath("/"); String filename = "建议正文内容.zip"; response.setContentType("application/octet-stream"); response.setHeader("Connection", "close"); // 表示不能用浏览器直接打开 response.setHeader("Accept-Ranges", "bytes"); // 告诉客户端允许断点续传多线程连接下载 response.setHeader("Content-disposition", "attachment; filename=" + new String(URLEncoder.encode(filename, "utf-8").getBytes("UTF-8"), "ISO-8859-1")); // 查询数据 String userid = getCurrentUserId(); List<String> rolecodes = sysUserMapper.selectRoleCodesByUserID(userid); // 代表 if (rolecodes.contains("db")) { delAdviceinfo.setCurruserid(userid); } // 代表团管理员 else if (rolecodes.contains("dbtgly")) { delAdviceinfo.setArea(getCurrentUser().getAreacode()); } // 承办单位 else if (rolecodes.contains("cbdw")) { delAdviceinfo.setUnitid(getCurrentUser().getDelunitid()); } List<DelAdviceinfo> list = delAdviceinfoMapper.selectBootPage(null, delAdviceinfo); for (DelAdviceinfo item : list) { // 查询附议代表 if (StringUtils.isNotBlank(item.getResolutionerids())) { String[] resoids = item.getResolutionerids().split(","); List<DelDelegationinfoofSc> resos = delDelegationinfoofScMapper.selectResoList(resoids); item.setResos(resos); } // 保存临时文件 String filefullname = item.getTitle() + "正文.doc"; if (StringUtils.isNotEmpty(item.getAdviceno())) { filefullname = item.getAdviceno() + "_" + filefullname; } filefullname = UUID.randomUUID().toString() + "_" + filefullname; String filepath = realpath + "/upload/tmp/" + filefullname; File file = new File(filepath); if (!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } FileOutputStream fos = new FileOutputStream(file); writeAdviceContent(item, fos); // 加入zip流 String entryname = file.getName(); entryname = entryname.substring(entryname.indexOf("_") + 1); ZipEntry zipEntry = new ZipEntry(entryname); zos.putNextEntry(zipEntry); InputStream is = new FileInputStream(file); int i; while ((i = is.read()) != -1) { zos.write(i); } is.close(); file.delete(); } zos.flush(); } catch (IOException e) { e.printStackTrace(); } finally { try { zos.close(); os.close(); } catch (IOException e2) { e2.printStackTrace(); } } }