@Override public void exportRec(Map<String, String> paramMap) { try { List<Map<String, Object>> list = ipccDao.selectList("taskDetailManage.queryTaskDetailList", paramMap); HttpServletResponse response = StrutsUtils.getResponse(); HttpServletRequest request = StrutsUtils.getRequest(); response.setHeader("Connection", "close"); response.setHeader("Content-Type", "application/vnd.ms-excel;charset=UTF-8"); String filename = System.currentTimeMillis() +".zip"; filename = encodeFileName(request, filename); response.setHeader("Content-Disposition", "attachment;filename=" + filename); OutputStream out = null; out = response.getOutputStream(); // create byte buffer byte[] buffer = new byte[1024]; ZipOutputStream zos = new ZipOutputStream(out); FileUtils gf = new FileUtils(); InputStream is= null; for (Iterator iterator = list.iterator(); iterator.hasNext();) { Map<String, Object> map = (Map<String, Object>) iterator.next(); Object status = map.get("status"); Object record_url = map.get("record_url"); if(status!=null && "3".equals(status) && record_url!=null){ zipAction(String.valueOf(record_url),is,zos,gf,buffer); } } zos.closeEntry(); zos.close(); is.close(); }catch (Exception e) { logger.error("Error creating zip file" + e); } } public void zipAction(String url,InputStream is,ZipOutputStream zos,FileUtils gf,byte[] buffer) throws Exception{ is = gf.getFileInputStream(url); String fileName = gf.getFileName(url); zos.putNextEntry(new ZipEntry(fileName)); int length; while ((length = is.read(buffer)) > 0) { zos.write(buffer, 0, length); } } public String encodeFileName(HttpServletRequest request, String fileName) throws UnsupportedEncodingException { String agent = request.getHeader("USER-AGENT"); if (null != agent && -1 != agent.indexOf("MSIE")) { return URLEncoder.encode(fileName, "UTF-8"); } else if (null != agent && -1 != agent.indexOf("Mozilla")) { return "=?UTF-8?B?"+ (new String(Base64.encodeBase64(fileName.getBytes("UTF-8")))) + "?="; } else { return fileName; } }
FileUtils.java
//从url获取文件的输入流 public InputStream getFileInputStream(String url) throws Exception{ InputStream murl = new URL(url).openStream(); return murl; } /** * 从url获取文件名 * @param url * @return * @throws IOException */ public String getFileName(String url) throws IOException { String fileName = url.substring(url.lastIndexOf('/')+1); if(!fileName.endsWith("wav") && !fileName.endsWith("mp3")){ fileName += ".wav"; } return fileName; }