下载网络附件

		String downUrl  = request.getParameter("url");
		String exportFileName  = StringUtil.iso2utf(request.getParameter("filename"))+".pdf";
		if("".equals(downUrl)){
			return ;
		}
	
		String finalFileName = "";
		String agent = request.getHeader("User-Agent");
		boolean isMSIE = (agent != null && agent.indexOf("MSIE") != -1);
		if (isMSIE) {
			finalFileName = java.net.URLEncoder.encode(exportFileName, "UTF8");
		} else {
			finalFileName = new String(exportFileName.getBytes("UTF-8"),
					"ISO-8859-1");
		}
		
		
		// 该步是最关键的一步,使用setHeader()方法弹出"是否要保存"的对话框,打引号的部分都是固定的值,不要改变
		response.setHeader("Content-disposition", "attachment;filename="+ finalFileName);
		
		// 获得一个 ServletOutputStream(向客户端发送二进制数据的输出流)对象
		OutputStream servletOutPutStream = response.getOutputStream();
		
		URL url = new URL(downUrl);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		// 设置超时间为3秒
		conn.setConnectTimeout(3 * 1000);
		// 防止屏蔽程序抓取而返回403错误
		conn.setRequestProperty("User-Agent",
				"Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
		// 获得一个从服务器上的文件myFile中获得输入字节的输入流对象
		InputStream fileInputStream = conn.getInputStream();
		
		byte bytes[] = new byte[1024];// 设置缓冲区为1024个字节,即1KB
		int len = 0;
		// 读取数据。返回值为读入缓冲区的字节总数,如果到达文件末尾,则返回-1
		while ((len = fileInputStream.read(bytes)) != -1) {
			// 将指定 byte数组中从下标 0 开始的 len个字节写入此文件输出流,(即读了多少就写入多少)
			servletOutPutStream.write(bytes, 0, len);
		}
		
		servletOutPutStream.close();
		fileInputStream.close();
		
		out.clear();
		out = pageContext.pushBody();

你可能感兴趣的:(下载)