Spring MVC 配置 multipart 解析器 上傳文件

#概述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:緩存

  • CommonsMultipartResolver:使用 Jakarta Commons FileUpload 解析。
  • StandardServletMultipartResolver : 依賴 Servlet 3.0 對 Multipart 的支持。

StandardServletMultipartResolver

  1. 將其聲明位Spring上下文中的一個Bean
@Bean
    public MultipartResolver multipartResolver() throws IOException {
        return new StandardServletMultipartResolver();
    }
  1. 配置 StandardServletMultipartResolver
public class ZKepsWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    //....other code
    @Override
    protected void customizeRegistration(ServletRegistration.Dynamic registration) {
        //緩存目錄 這裏能夠作不少配置,例如上傳文件的大小等
        registration.setMultipartConfig(new MultipartConfigElement("/var/local/tmp"));
    }
}

CommonsMultipartResolver

這個配置能夠一鼓作氣app

@Bean
    public MultipartResolver multipartResolver() throws IOException{
        //一樣的 能夠配置不少參數
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
        multipartResolver.setUploadTempDir(new FileSystemResource("/var/local/tmp"));
        return multipartResolver;
    }

處理 multipart 請求

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

相關文章
相關標籤/搜索