從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; } } }