Increase HTTP Post maxPostSize in Spring Boot

后端 未结 14 2108
无人共我
无人共我 2020-11-28 06:48

I\'ve got a fairly simple Spring Boot web application, I have a single HTML page with a form with enctype=\"multipart/form-data\". I\'m getting this error:

相关标签:
14条回答
  • 2020-11-28 07:29

    In Spring Boot >2 version, you can simply add following to the "application.properties" file:

    spring.servlet.multipart.max-file-size=10MB
    spring.servlet.multipart.max-request-size=20MB
    
    0 讨论(0)
  • 2020-11-28 07:30

    If you are using using x-www-form-urlencoded mediatype in your POST requests (as I do), the multipart property of spring-boot does not work. If your spring-boot application is also starting a tomcat, you need to set the following property in your application.properties file:

    # Setting max size of post requests to 6MB (default: 2MB)
    server.tomcat.max-http-post-size=6291456
    

    I could not find that information anywhere in the spring-boot documentations. Hope it helps anybody who also sticks with x-www-form-urlencoded encoding of the body.

    0 讨论(0)
  • 2020-11-28 07:31

    Found a solution. Add this code to the same class running SpringApplication.run.

    // 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(10000000); // 10 MB
                    }
                );
            }
        };
    }
    

    Edit: Apparently adding this to your application.properties file will also increase the maxPostSize, but I haven't tried it myself so I can't confirm.

    multipart.maxFileSize=10Mb # Max file size.
    multipart.maxRequestSize=10Mb # Max request size.
    
    0 讨论(0)
  • 2020-11-28 07:32

    For me this worked in yaml

    spring:
        profiles: ....
        application:
            name:"...."
        http:
            multipart:
                max-file-size: 2147483648
                max-request-size: 2147483648
    
    0 讨论(0)
  • 2020-11-28 07:34

    First, make sure you are using spring.servlet instead of spring.http.

    ---
    spring:
      servlet:
        multipart:
          max-file-size: 10MB
          max-request-size: 10MB
    

    If you have to use tomcat, you might end up creating EmbeddedServletContainerCustomizer, which is not really nice thing to do.

    If you can live without tomat, you could replace tomcat with e.g. undertow and avoid this issue at all.

    0 讨论(0)
  • 2020-11-28 07:34

    For me nothing of previous works (maybe use application with yaml is an issue here), but get ride of that issue using that:

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.MultipartConfigFactory;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.util.unit.DataSize;
    
    import javax.servlet.MultipartConfigElement;
    
    @ServletComponentScan
    @SpringBootApplication
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    
        @Bean
        MultipartConfigElement multipartConfigElement() {
            MultipartConfigFactory factory = new MultipartConfigFactory();
            factory.setMaxFileSize(DataSize.ofBytes(512000000L));
            factory.setMaxRequestSize(DataSize.ofBytes(512000000L));
            return factory.createMultipartConfig();
        }
    }
    
    0 讨论(0)
提交回复
热议问题