読者です 読者をやめる 読者になる 読者になる

SpringMVCで1MB以上のファイルをアップロードする

デフォルトの設定だとServlet側で1MBまでしかアップロードできないという制約がついていて下記エラーが出る

HTTP Status 500 - Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (2462513) exceeds the configured maximum (1048576)


元のソースを書き換えてFilterでフックするとか、Servletのクラスを継承して書き換えるとかいろいろかいてあったけど、Springの場合はbeanに登録するだけで設定を書き換えられた

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setMaxFileSize(10 * 1024 * 1024);
        factory.setMaxRequestSize(10 * 1024 * 1024);
        return factory.createMultipartConfig();
    }


MultipartConfigElementがSpring管理下になっていてそこで値をセットしているらしい
org.apache.catalina.connector.Requset.java L2677

MultipartConfigElement mce = getWrapper().getMultipartConfigElement();


このWrapperを追っていくとspringのクラスを呼び出していることがわかる

org.springframework.web.DispatcherServlet.java 


参考
https://blog.safaribooksonline.com/2013/09/30/rest-hypermedia/
http://spring.io/guides/gs/uploading-files/