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

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

基于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中运行截屏:


转载请注明

目录
相关文章
|
8天前
|
前端开发 Java Spring
Spring MVC 是如何对对象参数进行校验的
【6月更文挑战第4天】对象参数校验是使用 SpringMVC 时常用的功能,这篇文章尝试分析了,Spring 是如何实现这一功能的。
21 5
|
2天前
|
前端开发 Java Spring
Spring MVC 请求处理流程
Spring MVC 请求处理流程
4 0
|
6天前
|
JSON 前端开发 Java
Spring MVC 级联对象参数校验
【6月更文挑战第6天】在 Spring MVC 的使用过程中,我们会发现很多非常符合直觉的功能特性,但往往我们会习惯这种「被照顾得很好」的开发方式,依靠直觉去判断很多功能特性的用法。
9 1
|
8天前
|
XML 前端开发 Java
Spring3 MVC中使用Swagger生成API文档
Spring3 MVC中使用Swagger生成API文档
11 0
|
9天前
|
JSON 前端开发 API
Apache HttpClient调用Spring3 MVC Restful Web API演示
Apache HttpClient调用Spring3 MVC Restful Web API演示
11 1
|
9天前
|
前端开发 Java 关系型数据库
在Spring3 MVC中五步配置集成注解方式Hibernate3
在Spring3 MVC中五步配置集成注解方式Hibernate3
18 3
|
9天前
|
JSON 前端开发 Java
记录一次让我吐血的spring3 MVC HTTP406 Json转换错误
记录一次让我吐血的spring3 MVC HTTP406 Json转换错误
7 0
|
9天前
|
前端开发 Java Spring
自定义 Spring MVC Controller 方法参数处理
【6月更文挑战第3天】在 Spring MVC Controller 的方法参数,Spring 会自动为我们注入一些特殊的参数值,比如 HttpServletRequest、HttpServletResponse 等对象,或者 HTTP 请求参数。
49 0
|
9天前
|
前端开发 IDE Java
Spring3 MVC 集成Velocity中文支持
Spring3 MVC 集成Velocity中文支持
27 7
|
9天前
|
Web App开发 前端开发 Java
基于Spring3 MVC实现基于HTML form表单文件上传
基于Spring3 MVC实现基于HTML form表单文件上传
17 7
基于Spring3 MVC实现基于HTML form表单文件上传