通常狀況下,對上傳的文件會進行大小的限制。若是超過指定大小時會拋出異常,通常會對異常進行捕獲並友好的顯示出來。如下用SpringMVC之文件上傳進行完善。html
首先配置CommonsMultipartResolver,必須開啓resolveLazily,該參數表示延遲解析,不然沒法在Controller拋出異常web
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="resolveLazily" value="true" /> <property name="defaultEncoding" value="utf-8" /> <property name="maxUploadSize" value="100" /> </bean>
如今,當文件超過指定大小時就會拋出異常了,接着就是捕獲異常了。該上傳的Controller中加入該方法用來捕獲MaxUploadSizeExceededException:spring
@ExceptionHandler(MaxUploadSizeExceededException.class) public ModelAndView handleException(Exception e) throws Exception { return new ModelAndView("upload").addObject("msg", "文件太大!"); }
注意,該方法的參數不能含有Model。spa
以上這種方法只會捕獲該Controller拋出的異常,若是想定義全局的異常處理器,可以使用@ControllerAdvicecode
package cn.powerfully.demo.web.controller; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.multipart.MaxUploadSizeExceededException; import org.springframework.web.servlet.ModelAndView; @ControllerAdvice public class ExceptionResolver { @ExceptionHandler(MaxUploadSizeExceededException.class) public ModelAndView handlerMaxUploadSizeExceededException(MaxUploadSizeExceededException e){ return new ModelAndView("upload").addObject("msg", "文件太大!"); } }
該方法也能實現同樣的效果,可是它是針對全局的。對於全局的異常處理器來講,處理確定不能這麼寫,這裏只是演示寫法而已...htm