前台数据:
<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>

本文介绍了如何在Spring MVC中处理带有文件和数据的表单提交。通过将HttpServletRequest转换为MultipartHttpServletRequest,可以方便地获取MultipartFile对象来处理文件信息,同时使用getParameter方法获取表单的其他字段数据。Spring MVC内部已经实现了请求的解析,无需开发者手动分离文件和数据。为了启用文件上传,需要在spring-mvc.xml配置文件中配置CommonsMultipartResolver解析器。
1058

被折叠的 条评论
为什么被折叠?



