JAVA根据文件存放的url路径,ZIP压缩并下载

        @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;
    }

猜你喜欢

转载自blog.csdn.net/shengqianfeng/article/details/79611014