参考文章:
https://www.cnblogs.com/yunliu0603/p/9504756.html
https://www.cnblogs.com/tengyunhao/p/7670293.html
注意:
单文件 MultipartFile file;
多文件 MultipartFile[] file;
判断文件是否为空:!file.isEmpty() ---> 不为空
获取上传文件名:String originalFilename = file.getOriginalFilename() 包括文件名的后缀
文件保存路径:String filePath = request.getServletContext().getRealPath("/") + "upload/" + originalFilename;
初始化文件信息:File newFile = new File(filePath);
创建目录:newFile.getParentFile().mkdir();
转存文件:file.transferTo(newFile);
步骤:
1.编写一个控制类;
2.编写提交表单的 action 方法,并使用 SpringMVC 注解 @RequestParam 来指定表单中的 file 参数;
3.指定一个用于保存文件的 web项目路径;
4.通过 MultipartFile 的 transferTo() 来转存文件到相应的路径;
5.编写 form 表单;
6.在 springMVC 配置文件中,定义文件上传解析器;
springMVC配置文件:
<!-- 定义文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设定默认编码 -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 设定文件上传的最大值为5MB,5*1024*1024 -->
<property name="maxUploadSize" value="5242880"></property>
<!-- 设定文件上传时写入内存的最大值,如果小于这个参数不会生成临时文件,默认为10240 -->
<property name="maxInMemorySize" value="40960"></property>
<!-- 上传文件的临时路径,在启动服务时,就会进行创建 -->
<property name="uploadTempDir" value="fileUpload/temp"></property>
<!-- 延迟文件解析 -->
<property name="resolveLazily" value="true"/>
</bean>
MultipartResolver 用于处理文件上传,当收到请求时 DispatcherServlet 的 checkMultipart() 方法会调用 MultipartResolver 的 isMultipart() 方法判断请求中是否包含文件。如果请求数据中包含文件,则调用 MultipartResolver 的 resolveMultipart() 方法对请求的数据进行解析,然后将文件数据解析成 MultipartFile 并封装在 MultipartHttpServletRequest (继承了 HttpServletRequest) 对象中,最后传递给 Controller。
MultipartResolver 是一个接口,它的实现类如下图所示,分为 CommonsMultipartResolver 类和 StandardServletMultipartResolver 类。

其中 CommonsMultipartResolver 使用 commons Fileupload 来处理 multipart 请求,所以在使用时,必须要引入相应的 jar 包;
而 StandardServletMultipartResolver 是基于 Servlet 3.0来处理 multipart 请求的,所以不需要引用其他 jar 包,但是必须使用支持 Servlet 3.0的容器才可以,以tomcat为例,从 Tomcat 7.0.x的版本开始就支持 Servlet 3.0了。
关于 MultipartResolver 的具体讲解,参考:https://www.cnblogs.com/tengyunhao/p/7670293.html