从Spring3.1开始,Spring提供了两个MultipartResolver的实现用于处理multipart请求,分别是:CommonsMultipartResolver和StandardServletMultipartResolver。CommonsMultipartResolver使用common fileupload来处理multipart请求,所以在使用的时候必须引入相应的jar包。StandardServletMultipartResolver是基于Servlet3.0来处理multipart请求的,所以不需要引用其他jar包,但是必须使用支持Servlet3.0的容器才可以。
Spring的配置
在配置文件中,bean的id必须是multipartResolver,实例如下:
<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"> </bean>
web.xml的配置
1.要注意web.xml节点使用的版本必须是3.0及以上
2.注意servlet节点下的multipart-config节点的配置。区别与使用CommonsMultipartResolver进行文件上传时配置的不同。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> ···· <servlet> <servlet-name>fileUpload</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:fileUpload-servlet.xml</param-value> </init-param> <load-on-startup>0</load-on-startup> <multipart-config> <!--临时文件的目录--> <location>/data</location> <!-- 上传文件最大2M --> <max-file-size>2097152</max-file-size> <!-- 上传文件整个请求不超过4M --> <max-request-size>4194304</max-request-size> </multipart-config> </servlet> .... </web-app>
Controller设置
@Controller @RequestMapping(value = "/file") public class FileController { /** * 在方法签名中使用MulitpartHttpServletRequest类型。 * * @param request * @return */ @RequestMapping(value = "/commUploadB") @ResponseBody public JSONObject commUploadB(MultipartHttpServletRequest request) { JSONObject json = new JSONObject(); json.put("succ", false); try { MultipartFile file = request.getFile("uploadFileB");// 与页面input的name相同 File imageFile = new File("d:/upload2.jpg");// 上传后的文件保存目录及名字 file.transferTo(imageFile);// 将上传文件保存到相应位置 json.put("succ", true); return json; } catch (Exception e) { e.printStackTrace(); return json; } } /** * 在方法签名中使用MultipartFile类型,并使用@RequestPart注解。 * * @param uploadFileC * @return */ @RequestMapping(value = "/commUploadC") @ResponseBody public JSONObject commUploadC(@RequestPart("uploadFileC") MultipartFile uploadFileC) { JSONObject json = new JSONObject(); json.put("succ", false); try { File imageFile = new File("d:/upload3.jpg");// 上传后的文件保存目录及名字 uploadFileC.transferTo(imageFile);// 将上传文件保存到相应位置 json.put("succ", true); return json; } catch (Exception e) { e.printStackTrace(); return json; } } }