前台数据:
<form id="AddForm" action="Manage/add.action" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="text" name="username">
<input type="text" name="usermobile">
</form>
后台映射接收到后将普通的HttpServletRequest转换为MultipartHttpServletRequest
MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest)request;
然后用mRequest.getFile("file")得到MultipartFile对象从而得到文件相关信息
利用mRequest.getParameter("username")得到表单其他相关字段信息
其实,springmvc已经在内部进行了普通请求或带文件请求的判断,并对应已进行了解析,可从源码中看到也是利用apache common.fileupload jar进行的解析,
所以已经不需要我们自己再次进行文件与数据分离的解析了。
@Override | |
public MultipartHttpServletRequest resolveMultipart(final HttpServletRequest request) throws MultipartException { | |
Assert.notNull(request, "Request must not be null"); | |
if (this.resolveLazily) { | |
return new DefaultMultipartHttpServletRequest(request) { | |
@Override | |
protected void initializeMultipart() { | |
MultipartParsingResult parsingResult = parseRequest(request); | |
setMultipartFiles(parsingResult.getMultipartFiles()); | |
setMultipartParameters(parsingResult.getMultipartParameters()); | |
setMultipartParameterContentTypes(parsingResult.getMultipartParameterContentTypes()); | |
} | |
}; | |
} | |
else { | |
MultipartParsingResult parsingResult = parseRequest(request); | |
return new DefaultMultipartHttpServletRequest(request, parsingResult.getMultipartFiles(), | |
parsingResult.getMultipartParameters(), parsingResult.getMultipartParameterContentTypes()); | |
} | |
} |
springmvc-web 源码地址:
https://github.com/spring-projects/spring-framework/tree/master/spring-web/src/main/java/org/springframework/web/multipart
注:配置中需要在spring-mvc.xml中配置解析器
<!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->
<!-- 需要apache common.fileupload jar包 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 默认编码 -->
<property name="defaultEncoding" value="utf-8" />
<!-- 文件大小最大值 -->
<property name="maxUploadSize" value="10485760000" />
<!-- 内存中的最大值 -->
<property name="maxInMemorySize" value="40960" />
</bean>