什么都还来的及

javaweb文件压缩下载

/**
	 * 合同批量下载
	 * 
	 * @return
	 */
	@RequestMapping(value = "/cloudSign/downAll.htm", method = RequestMethod.POST)
	public void downLoadAll(HttpServletRequest request, HttpServletResponse response) {

		String cloudSignContract = request.getParameter("cloudSignContractVo");
		List<CloudSignContractVo> list = JSON.parseArray(cloudSignContract, CloudSignContractVo.class);

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd-HH:mm:ss");
		String dateFormat = sdf.format(new Date());
		String name = "";
		String realZipName = "";
		String zipName = dateFormat+"_协议" + ".zip";
		String agent = request.getHeader("User-Agent"); // 获得浏览器头信息
		realZipName = nameEncodeChanged(agent, zipName);
		ZipOutputStream zipos = null;
		DataOutputStream os = null;
		try {
			response.setContentType("multipart/form-data");   
		    response.setCharacterEncoding("UTF-8");
			response.setHeader("Content-Disposition", "attachment; filename=" + realZipName);
			zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
			zipos.setMethod(ZipOutputStream.DEFLATED);// 设置压缩方法
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("realZipName encodeed failed error :" + e);
		}
		for (int i = 0; i < list.size(); i++) {
			try {
				URL url = new URL(list.get(i).getUrl());
				InputStream is = url.openStream();
				name = list.get(i).getMemberName() + "_" + list.get(i).getMemberId() + ".pdf";
				zipos.putNextEntry(new ZipEntry(name));
				zipos.setEncoding("GBK");
				os = new DataOutputStream(zipos);
				byte[] b = new byte[1024];
				int length = 0;
				while ((length = is.read(b)) != -1) {
					os.write(b, 0, length);
				}
				is.close();
				zipos.closeEntry();
			} catch (Exception e) {
				e.printStackTrace();
				logger.error("contract download failed error :" + e);
			}
		}
		try {
			os.flush();
			os.close();
			zipos.close();
		} catch (IOException e) {
			e.printStackTrace();
			logger.error("zipos close error :" + e);
		}
	}

	/**
	 * 根据请求头类型判断浏览器类型,并对字符串选择编码
	 * 
	 * @param agent    请求头
	 * @param fileName 文件名称
	 * @return 编码正确的文件名
	 * @throws UnsupportedEncodingException
	 */
	public String nameEncodeChanged(String agent, String fileName) {
		String realZipName = "";
		try {
			if (agent.contains("MSIE") || agent.contains("Trident")) { // IE
				realZipName = URLEncoder.encode(fileName, "UTF-8");
			} else {
				realZipName = new String(fileName.getBytes("utf-8"), "ISO8859-1"); // 其他
			}
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			logger.error("nameEncodeChanged character error" + e);
		}
		return realZipName;
	}

  

posted @ 2018-07-26 11:23  coder_sun  阅读(287)  评论(0编辑  收藏  举报