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/