您的位置:首页 > 编程语言 > Java开发

基于Spring3 MVC实现基于HTML form表单文件上传

2013-01-06 19:17 417 查看
基于Spring3 MVC实现基于form表单文件上传
一:杂项准备
环境搭建参考这里-http://blog.csdn.net/jia20003/article/details/8471169
二:前台页面
根据RFC1867,只要在提交form表单中声明提交方法为POST,enctype属
性声明为multipart/form-data, action声明到要提交的url即可。具体如下:



三:spring配置
使用spring3的MultipartHttpReqest来接受来自浏览器的发送的文件内容。
需要配Multipart解析器在express-servlet.xml中。内容如下:



同时还需要在maven的pom.xml文件添加apachefileupload与common-io两个包。



四:Controller中方法实现

@RequestMapping(value = "/uploadFile", method = RequestMethod.POST) public ModelAndView getUploadFile(HttpServletRequest request, HttpServletResponse response) { 	System.out.println("fucking spring3 MVC upload file with Multipart form"); 	String myappPath = request.getSession().getServletContext().getRealPath("/"); 	try { 		if (request instanceof MultipartHttpServletRequest) { 			MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; 			System.out.println("fucking spring3 MVC upload file with Multipart form"); 			// String myappPath = multipartRequest.getServletContext().getRealPath("/");  			// does not work, oh my god!! 			MultipartFile file = multipartRequest.getFiles("userfile1").get(0); 			long size = file.getSize(); 			byte[] data = new byte[(int) size]; 			InputStream input = file.getInputStream(); 			input.read(data); 			 			// create file, if no app context path, will throws access denied. 			// seems like you could not create any file at tomcat/bin directory!!! 			File outFile = new File(myappPath + File.separator + file.getOriginalFilename()); 			if(!outFile.exists()) { 				outFile.createNewFile(); 				System.out.println("full path = " + outFile.getAbsolutePath()); 			} else { 				System.out.println("full path = " + outFile.getAbsolutePath()); 			} 			FileOutputStream outStream = new FileOutputStream(outFile); 			 			outStream.write(data); 			outStream.close(); 			input.close(); 		} 	} catch (Exception e) { 		e.printStackTrace(); 	}  	return new ModelAndView("welcome"); }
常见问题:
1. java.io.IOException: Access is denied避免这个错误是把文件创建在app
context path的下面所以要获取servlet context的本地路径。
2. Request类型不是MultipartHttpReqest类型,原因是没有配置spring的Multipart解析器
Chrome中运行截屏:



转载请注明

本文出自 “流浪的鱼” 博客,请务必保留此出处http://gloomyfish.blog.51cto.com/8837804/1400467
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: