1.form的enctype=”multipart/form-data” 這個是上傳文件必須的
2.applicationContext.xml中 <bean id=”multipartResolver” class=”org.springframework.web.multipart.commons.CommonsMultipartResolver”/> 關於文件上傳的配置不能少
3.需要commons.fileupload和commons.io的jar包
Spring的配置文件
<!-- SpringMVC上傳文件時,需要配置MultipartResolver處理器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8"/> <!-- 指定所上傳文件的總大小不能超過200KB。注意maxUploadSize屬性的限制不是針對單個文件,而是所有文件的容量之和 --> <property name="maxUploadSize" value="200000"/> </bean> <!-- SpringMVC在超出上傳文件限制時,會拋出org.springframework.web.multipart.MaxUploadSizeExceededException --> <!-- 該異常是SpringMVC在檢查上傳的文件信息時拋出來的,而且此時還沒有進入到Controller方法中 --> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <!-- 遇到MaxUploadSizeExceededException異常時,自動跳轉到/WEB-INF/ftl/common/error_fileupload.ftl頁面 --> <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">/common/error_fileupload</prop> </props> </property> </bean>
Controller
package com.zyz.action; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.util.Date; /** * Created by zyz on 2016-8-26. */ @Controller public class UploadAction { @RequestMapping(value = "/uploadform",method = RequestMethod.GET) public String uploadForm(){ return "uploadForm"; } @RequestMapping(value = "/upload",method = RequestMethod.POST) public String upload(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request, ModelMap model) { System.out.println("開始"); String path = request.getSession().getServletContext().getRealPath("upload"); // String fileName = file.getOriginalFilename(); String fileName = new Date().getTime()+".jpg"; System.out.println(path); File targetFile = new File(path, fileName); if(!targetFile.exists()){ targetFile.mkdirs(); } //保存 try { file.transferTo(targetFile); } catch (Exception e) { e.printStackTrace(); } model.addAttribute("fileUrl", request.getContextPath()+"/upload/"+fileName); return "uploadResult"; } }