下面貼出主要的配置和代碼。
html
web.xml
java
<servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <multipart-config> <max-file-size>5242880</max-file-size><!-- 5MB --> <max-request-size>20971520</max-request-size><!-- 20MB --> <file-size-threshold>0</file-size-threshold> </multipart-config> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
在<multipart-config>中,配置相關信息,限制文件上傳的大小等。git
相關可配置信息以下:github
file-size-threshold:數字類型,當文件大小超過指定的大小後將寫入到硬盤上。默認是0,表示全部大小的文件上傳後都會做爲一個臨時文件寫入到硬盤上。web
location:指定上傳文件存放的目錄。當咱們指定了location後,咱們在調用Part的write(String fileName)方法把文件寫入到硬盤的時候能夠,文件名稱能夠不用帶路徑,可是若是fileName帶了絕對路徑,那將以fileName所帶路徑爲準把文件寫入磁盤。spring
max-file-size:數值類型,表示單個文件的最大大小。默認爲-1,表示不限制。當有單個文件的大小超過了max-file-size指定的值時將拋出IllegalStateException異常。express
max-request-size:數值類型,表示一次上傳文件的最大大小。默認爲-1,表示不限制。當上傳時全部文件的大小超過了max-request-size時也將拋出IllegalStateException異常。spring-mvc
SpringMVC的配置文件:mvc
<context:component-scan base-package="com.github.upload" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/> </context:component-scan> <mvc:annotation-driven /> <bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>
注意在使用Commons FileUpload方式上傳的時候,MultipartResolver的實現是app
org.springframework.web.multipart.commons.CommonsMultipartResolver
而在這裏,須要將實現配置成
org.springframework.web.multipart.support.StandardServletMultipartResolver
HTML頁面以及controller:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>文件上傳</title> </head> <body> <form action="fileUpload.do" method="post" enctype="multipart/form-data"> 文件: <input type="file" name="uploadFile" /><br/> <input type="submit" value="上傳" /> </form> </body> </html>
@Controller public class FileUploadController { private static final Logger log = LogManager.getLogger("FileUpload"); @ResponseBody @RequestMapping("/fileUpload") public Object fileUpload(MultipartFile uploadFile) { log.info( () -> uploadFile.getOriginalFilename()); log.info( () -> uploadFile.getSize()); log.info( () -> uploadFile.getName()); return "hello world!"; } }
參考工程的GitHub地址:
https://github.com/ivyboy/spring-example