struts1.2的上传(传统表单的上传)

最近要实现一个上传技术,起初考虑使用struts1.2的html标签来实现上传功能,但是后来发现如果使用html标签那么在上传页面的布局,则不是那么灵活了! 后来放弃了这种思路,寻找使用传统标签来实现上传功能!

1。定义上传页面;

	
(文件描述)
  是否覆盖同名附件
  

 

2。定义要使用的actionform,在其中使用file类型的字段,处理上传流!

ActionForm:

protected FormFile theFile;

 

3。后台处理传来的文件流,并保存到指定的服务器目录下;

public ActionForward upfile(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		ActionForward forward = null;
		if (form instanceof UpFileForm) {// 如果form是UpLoadsForm
			response.setContentType("text/html; charset=GBK");
			UpFileForm theForm = (UpFileForm) form;
			String replace = theForm.getReplace();
			System.out.println("-=-=>"+theForm.getDescFile());
			FormFile file = theForm.getTheFile();// 取得上传的文件
			String contentType = file.getContentType();
			
			String size = (file.getFileSize() + " bytes");// 文件大小
			String fileName = file.getFileName();// 文件名

			String area_code = request.getParameter("h_xian");
			String yljg = request.getParameter("yljg");
			String serverPath = request.getParameter("serverPath");
			
			String desc = theForm.getDescFile();
			
			try {
				InputStream stream = file.getInputStream();// 把文件读入
				//创建母文件夹
				String folder_path = serverPath+"\\"+area_code+"\\"+yljg;
				File folder_file =new File(folder_path);
				if(!folder_file.exists()){
					folder_file.mkdirs();
				}
				if(replace==null||"".equals(replace)){
					if(getUpFileName(folder_path,fileName)){
						request.setAttribute("S_ERROR_MSG", "对不起,上传的文件名重复,请重新命名!");
						return mapping.findForward("error");
					}					
				}
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
				OutputStream bos = new FileOutputStream(folder_path + "\\"
						+ fileName);
				// 建立一个上传文件的输出流,将上传文件存入web应用的根目录。
				int bytesRead = 0;
				byte[] buffer = new byte[8192];
				while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
					bos.write(buffer, 0, bytesRead);// 将文件写入服务器
				}
				bos.close();
				stream.close();
			} catch (Exception e) {
				System.err.print(e);
				e.printStackTrace();
				request.setAttribute("S_ERROR_MSG", "对不起,附件上传失败!");
				return mapping.findForward("error");
			}
						return mapping.findForward("input");
		}
		return null;
	}
	

 

 

 上传实现后,如果要实现下载功能,则思路是这样的:

只要获取该文件所在的http路径,然后写在a标签的href属性中,然后设定target属性值为a便可! 当我们点击该链接是,必可进入都该文件可! 我们可以对该链接右键进行目标另存为或者迅雷下载! 如果我们要下载的是doc文件或者excel文件,在点击链接后,便可弹出保存或者打开对话框! 也就是说访问web上的资源,是这样的情况! 如果路径为本地路径,访问本地资源,点击链接,则直接弹出保存对话框! 这是web访问和本地访问的不同方式!

 

 

 

你可能感兴趣的:(J2EE企业级开发)