必須明確告訴DispatcherServlet如何處理MultipartRequest。
SpringMVC中提供了文件上傳使用方式如下
配置xxx-servlet.xml,添加如下代碼:
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 設置上傳文件的最大尺寸為1MB -->
<property name="maxUploadSize">
<value>1048576</value>
</property>
</bean>
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 設置上傳文件的最大尺寸為1MB -->
<property name="maxUploadSize">
<value>1048576</value>
</property>
</bean>
注意這里的文件尺寸實際上只的是所以文件總大小
如果配置了文件大小就以為這你需要配置異常信息控制
所以需要配置異常顯示
<!-- SpringMVC在超出上傳文件限制時,會拋出org.springframework.web.multipart.MaxUploadSizeExceededException -->
<!-- 該異常是SpringMVC在檢查上傳的文件信息時拋出來的,而且此時還沒有進入到Controller方法中 -->
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!-- 遇到MaxUploadSizeExceededException異常時,自動跳轉到/WEB-INF/jsp/error_fileupload.jsp頁面 -->
<prop
key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop>
</props>
</property>
</bean>
<!-- SpringMVC在超出上傳文件限制時,會拋出org.springframework.web.multipart.MaxUploadSizeExceededException -->
<!-- 該異常是SpringMVC在檢查上傳的文件信息時拋出來的,而且此時還沒有進入到Controller方法中 -->
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!-- 遇到MaxUploadSizeExceededException異常時,自動跳轉到/WEB-INF/jsp/error_fileupload.jsp頁面 -->
<prop
key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop>
</props>
</property>
</bean>
或者偷懶點,不設置大小,則最終默認是值為不限制。如果非要控制返回信息,可以考慮在地應以的異常處理中返回指定格式數據,例如JSON
配置完了頁面上一如既往的需要再form表單中增加:enctype="multipart/form-data"
然后就是需要處理的action了,可以有兩種方式
第一種方式:
public String login( @RequestParam MultipartFile file, Model model) {
………………
}
public String login( @RequestParam MultipartFile file, Model model) {
………………
}
其中file的名字必須保證與<input type=file>中的那么屬性值保持一致,若果是多文件上傳,則考慮使用
public String login(@Valid UserInfo userInfo, BindingResult result, @RequestParam MultipartFile[] files, Model model) {
………………
}
public String login(@Valid UserInfo userInfo, BindingResult result, @RequestParam MultipartFile[] files, Model model) {
………………
}
單文件可以省略 @RequestParam 多文件則不可省略
第二種方式:
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// 轉型為MultipartHttpRequest:
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// 獲得文件:
MultipartFile file = multipartRequest.getFile(" file ");
}
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// 轉型為MultipartHttpRequest:
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// 獲得文件:
MultipartFile file = multipartRequest.getFile(" file ");
}
這樣也可以獲取到文件