#概述html
儘管通常表單提交足以知足對典型的基本文本提交,可是當面對傳送二進制數據,例如圖片,視頻等就顯得力不從心了。與之不一樣的是,multipart 格式的數據會將一個表單拆分爲多個部分 ,每一個部分對應一個輸入域。在通常的表單輸入域中,它所對應的部分會放置文本型數據,可是若是是上傳文件的話,所對應的就是二進制。java
###修改表單git
首先你得修改你的表單,告訴瀏覽器以 multipart 數據的形式提交表單,而不是以表單數據的形式提交。github
<form method="POST" enctype="multipart/form-data"> <!--- your form --> </form>
###配置 multipart 解析器瀏覽器
DispatcherServlet 並無實現任何解析 multipart 請求數據的功能。它將該功能委託給了 MultipartResolver 策略接口的實現,經過這個實現類來解析 multipart 請求中的內容。從Spring 3.1 開始,Spring 內置的兩個 MultipartResolver:緩存
@Bean public MultipartResolver multipartResolver() throws IOException { return new StandardServletMultipartResolver(); }
public class ZKepsWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { //....other code @Override protected void customizeRegistration(ServletRegistration.Dynamic registration) { //緩存目錄 這裏能夠作不少配置,例如上傳文件的大小等 registration.setMultipartConfig(new MultipartConfigElement("/var/local/tmp")); } }
這個配置能夠一鼓作氣app
@Bean public MultipartResolver multipartResolver() throws IOException{ //一樣的 能夠配置不少參數 CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); multipartResolver.setUploadTempDir(new FileSystemResource("/var/local/tmp")); return multipartResolver; }
Spring 提供了一個 MultipartFile 接口,它爲處理multipart 數據提供了內容豐富的對象。因此能夠改寫你的 Controller了。ide
@RequestMapping(value = "/detailRegister", method = RequestMethod.POST) public String detailRegister(@RequestPart("avator") MultipartFile avator) { //MultipartFile 接口有不少方法,這只是其中一個。 try { avator.transferTo( new File("/var/local/avators/" + avator.getOriginalFilename()) ); } catch (Exception ex) { ex.printStackTrace(); } return "index"; }
Migrated to https://sheltonsuen.github.iospa