【问题标题】:Multipart File Exceed Limit Exception多部分文件超出限制异常
【发布时间】:2016-04-03 14:11:34
【问题描述】:

我正在使用 SPring 引导来开发我的系统,但是在上传超过 1MB 的文件(使用多部分文件类型)时出现此异常。谁能给我解释一下?谢谢

java.lang.IllegalStateException: Multipart Mime 部分文件超过最大文件大小 在 org.eclipse.jetty.util.MultiPartInputStreamParser$MultiPart.write(MultiPartInputStreamParser.java:111) ~[jetty-util-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.util.MultiPartInputStreamParser.parse(MultiPartInputStreamParser.java:681) ~[jetty-util-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.util.MultiPartInputStreamParser.getParts(MultiPartInputStreamParser.java:400) ~[jetty-util-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.Request.getParts(Request.java:2146) ~[jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.Request.extractMultipartParameters(Request.java:386) ~[jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.Request.extractContentParameters(Request.java:309) ~[jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.Request.extractParameters(Request.java:257) ~[jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.Request.getParameter(Request.java:826) ~[jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:70) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) ~[jetty-servlet-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) ~[jetty-servlet-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:103) ~[spring-boot-actuator-1.3.1.RELEASE.jar:1.3.1.RELEASE] 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) ~[jetty-servlet-9.2.14.v20151106.jar:9.2.14.v20151106] 在 vn.com.splussoftware.sms.config.OAuth2AuthenticationFilter.doFilter(OAuth2AuthenticationFilter.java:71) ~[bin/:na] 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) ~[jetty-servlet-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) [jetty-servlet-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) [jetty-security-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) [jetty-servlet-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.Server.handle(Server.java:499) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) [jetty-server-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) [jetty-io-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) [jetty-util-9.2.14.v20151106.jar:9.2.14.v20151106] 在 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) [jetty-util-9.2.14.v20151106.jar:9.2.14.v20151106] 在 java.lang.Thread.run(Unknown Source) [na:1.8.0_66]

【问题讨论】:

    标签: spring file multipart


    【解决方案1】:

    application.properties 文件中配置文件上传。将单个多部分文件和整个请求(可以包含多个文件)的限制设置为 3 MB(Spring Boot 2.x):

    spring.servlet.multipart.max-file-size: 3MB
    spring.servlet.multipart.max-request-size: 3MB
    

    默认为:

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

    参考:Spring Boot: Handling Multipart File Uploads

    【讨论】:

    • 谢谢您,先生,它直接解决了我的问题,但我可以将其配置为无限制吗?喜欢 -1(是的 -1 是无限的,我试过了)
    • 对于来自 Google 的其他人,最新文档指出,唯一需要的属性是:spring.http.multipart.max-file-size
    • 这些属性似乎有点移动了。这对我有用:spring.http.multipart.maxFileSize: 20MB spring.http.multipart.maxRequestSize: 20MB
    • 这里要注意spring.http.multipart.maxFileSizespring.http.multipart.maxRequestSize 适用于springBoot 1.X,其中spring.servlet.multipart.max-file-sizespring.servlet.multipart.max-request-size 适用于springBoot 2.X
    【解决方案2】:

    属性文件发生了一些变化。

    spring:
      http:
        multipart:
          maxFileSize: 20MB
          maxRequestSize: 20MB
    

    请参阅https://github.com/spring-projects/spring-boot/blob/v1.4.2.RELEASE/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/MultipartProperties.java 了解所有可配置属性的列表。

    【讨论】:

    • 可能还需要定义file-size-threshold: 5MB,否则整个文件会被加载到内存中。
    【解决方案3】:

    对于 Spring Boot 2,application.yml 文件将如下所示:

    spring:
      servlet:
        multipart:
          enabled: true
          max-file-size: 20MB
          max-request-size: 20MB
    

    【讨论】:

      【解决方案4】:

      在节点中 <servlet> .... <multipart-config> <location>/tmp</location> <max-file-size>1000000000</max-file-size> <max-request-size>1500000000</max-request-size> <file-size-threshold>0</file-size-threshold> </multipart-config>

      【讨论】:

      • 由于未知原因,我的 spring-boot 应用程序在部署在码头时会忽略此设置。只有 application.properties 设置才能正常工作。
      • 你在你的 servlet 中使用 @MultipartConfig 吗?
      • 使用 spring 和 jetty 上传的示例:spring.io/guides/gs/uploading-files
      • 在该示例中,最大大小在 .properties 文件中指定。
      【解决方案5】:

      在spring的文档中(https://spring.io/guides/gs/uploading-files/)建议放入src/main/resources/application.properties

      spring.servlet.multipart.max-file-size=100Mb
      spring.servlet.multipart.max-request-size=100Mb
      

      对我有用!

      【讨论】:

        【解决方案6】:

        对文件大小和请求大小不加限制

        Spring Boot 1.5.x:

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

        Spring Boot 2.0.x:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-30
          • 2017-06-17
          • 2021-04-20
          • 2022-10-30
          • 2019-08-30
          • 2019-03-09
          • 2017-01-30
          • 1970-01-01
          相关资源
          最近更新 更多