Java Spring max. size limit for upload

Simon picture Simon · Jun 25, 2018 · Viewed 10.7k times · Source

I tried to upload files to my controller.

This is the upper part pf my controller. It works till i reach i maximum request size of +- 2MB

> @RequestMapping(value = {"/runlocalfiles"}, method =
> RequestMethod.POST, produces = "application/json")
>     @ResponseBody
>     @CrossOrigin(origins = "http://localhost:4200")
>     public ResponseEntity run( HttpServletRequest request) {
>         String jsonBase64Files = request.getParameter("base64files");
>         String jsonChecks = request.getParameter("checks");

Error message in browser:

> Failed to load http://localhost:5001/runlocalfiles: No
> 'Access-Control-Allow-Origin' header is present on the requested
> resource. Origin 'http://localhost:4200' is therefore not allowed
> access. The response had HTTP status code 500.

Error in Java console:

> java.lang.IllegalStateException: The multi-part request contained
> parameter data (excluding uploaded files) that exceeded the limit for
> maxPostSize set on the associated connector   at
> org.apache.catalina.connector.Request.parseParts(Request.java:2893)
> ~[tomcat-embed-core-8.5.20.jar:8.5.20]...

I have tried to increase the upload size by adding new lines to the application.properties. Also tried to change -1 to e.g. 100MB

> spring.servlet.multipart.max-file-size= -1
> spring.servlet.multipart.max-request-size= -1
> spring.http.multipart.max-file-size = -1
> spring.http.multipart.max-request-size= -1

Any help is apriciated.

Answer

Simon picture Simon · Jun 26, 2018

So i found a working solution. I need to combine your two solutions.

Adding this to the initial class:

// Set maxPostSize of embedded tomcat server to 10 megabytes (default is 2 MB, not large enough to support file uploads > 1.5 MB)
@Bean
EmbeddedServletContainerCustomizer containerCustomizer() throws Exception {
    return (ConfigurableEmbeddedServletContainer container) -> {
        if (container instanceof TomcatEmbeddedServletContainerFactory) {
            TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
            tomcat.addConnectorCustomizers(
                    (connector) -> {
                        connector.setMaxPostSize(100000000); // 100 MB
                    }
            );
        }
    };
}

and this to the application properties:

spring.http.multipart.max-file-size=100MB
spring.http.multipart.max-request-size=100MB