Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.sction.mvc.viewrender;
  
  
 
 
 public class FileViewRender implements ViewRender {
  
 	public void render(ServletContext servletContext,
 			HttpServletRequest requestHttpServletResponse response,
 			Object objString encodingController controllerAction actionthrows Exception { 
 		InputStream inputs = null;
 		OutputStream outputs = null;
 		FileViewModel fileBean = ((FileViewModelobj);
 		String name = fileBean.getName();
 		String suffix = fileBean.getSuffix();
 
 		if (fileBean.isDown()) {
 			String nameEncoding = fileBean.getNameEncoding();
 			if (nameEncoding == null
 					|| nameEncoding.trim().equals("")) {
 				nameEncoding = request.getCharacterEncoding();
 			}
 			String mimeType = fileBean.getMimeType();
 			if (mimeType == null || mimeType.trim().equals("")) {
 				mimeType = "application/octet-stream;";
 			} 
 			java.io.File file = fileBean.getFile(); 
 			if (file != null && file.exists() && file.isFile()) {
 				Long fileSize = file.length();
 				response.reset();
 				response.setCharacterEncoding(encoding);
 				response.setContentType(mimeType);
 				if (fileBean.isStream()) {
 					String target = request.getParameter("target");
 					int targetInt = 0;
 					RandomAccessFile raf = null;
 					int totalByte = 0;
 					try {
 						raf = new RandomAccessFile(file"r");
 						totalByte = (intraf.length();
 						if (target != null && !"".equals(target)) {
 							try {
 								targetInt = Integer
 										.parseInt(target);
 								byte[] headData = new byte[] { 'F',
 										'L''V', 1, 1, 0, 0, 0, 9,
 										0, 0, 0, 9 }; // 拖动时间轴后的response中头信息需写入该字节
 								response.getOutputStream().write(
 										headData);
 								response.setContentLength(totalByte
 										- targetInt + 13);
 							} catch (NumberFormatException e) {
 								targetInt = 0;
 							}
 						} else {
 							response.setContentLength(totalByte
 									- targetInt);
 						}
 						raf.skipBytes(targetInt);// 跳过时间轴前面的字节;
 						byte[] b = new byte[4096];
 						while (raf.read(b) != -1) {
 							response.getOutputStream().write(b);
 						}
 						response.getOutputStream().flush();
 
 					} catch (Exception e) {
 						String simplename = e.getClass()
 						if (!"ClientAbortException"
 								.equals(simplename)) {
 						}// web端拖动时间轴总有连接被重置的异常,暂时还不知如何解决,可以此方式不输出异常
 					} finally {
 						if (raf != null) {
 							raf.close();
 						}
 					}
 				} else {
 					if ((name == null || name.trim().equals(""))) {
 						name = FileUtils.getFileSimpleName(file
 								.getPath());
 					}
 					String dfn="";
 					if(request.getHeader("User-Agent").toLowerCase().indexOf("msie")!=-1){ 
 						dfn= URLEncoder.encode(name+suffixnameEncoding);
					}else{
						dfn=new String((name+suffix).getBytes(nameEncoding),"ISO-8859-1"); 
					}
					response.addHeader(
							"Content-Disposition",
							"attachment; filename=\""+dfn
"\"");
					response.setHeader("Content-Length"""
fileSize);
					outputs = response.getOutputStream();
					inputs = new FileInputStream(file);
					byte[] buf = new byte[1024];
					int len = 0;
					while ((len = inputs.read(buf)) > 0)
						outputs.write(buf, 0, len);
					if (inputs != null) {
						inputs.close();
					}
					if (outputs != null) {
						outputs.close();
					}
				}
else if (fileBean.getBin() != null) {
				String dfn="";
				if(request.getHeader("User-Agent").toLowerCase().indexOf("msie")!=-1){ 
					dfn= URLEncoder.encode(name+suffixnameEncoding);
				}else{
					dfn=new String((name+suffix).getBytes(nameEncoding),"ISO-8859-1"); 
				}
				response.reset();
				response.setCharacterEncoding(encoding);
				response.setContentType(mimeType);
				response.addHeader(
						"Content-Disposition",
						"attachment; filename=\""dfn + "\"");
				response.setHeader("Content-Length",
						"" + fileBean.getBin().length);
				outputs = response.getOutputStream();
				outputs.write(fileBean.getBin());
				if (outputs != null) {
					outputs.close();
				}
else {
				// 如果FileViewModel中的文件不存在
				response.setCharacterEncoding("UTF-8");
				PrintWriter out = response.getWriter();
				out.println("<html>");
				out.println("<head>");
				out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");
				out.println("</head>");
				out.println("<body>");
				out.println("<script type=\"text/javascript\">");
				out.println("alert('服务器不存在此文件:" + name + suffix
"');");
				out.println("history.back();");
				out.println("</script>");
				out.println("</body>");
				out.println("</html>");
				out.flush();
				out.close();
			}
else {
			// 如果FileViewModel中的文件不允许下载
			String msg = fileBean.getMsg();
			response.setCharacterEncoding("UTF-8");
			PrintWriter out = response.getWriter();
			out.println("<html>");
			out.println("<head>");
			out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");
			out.println("</head>");
			out.println("<body>");
			out.println("<script type=\"text/javascript\">");
			out.println("alert('" + (msg == null ? "文件不许下载。" : msg)
"(" + name + suffix + ")');");
			out.println("history.back();");
			out.println("</script>");
			out.println("</body>");
			out.println("</html>");
			out.flush();
			out.close();
		}
	}
New to GrepCode? Check out our FAQ X