zoukankan      html  css  js  c++  java
  • 解决springBoot上传大文件异常问题

    上传文件过大时的报错:

    org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException: the request was rejected because its size (70179886) exceeds the configured maximum (10485760)
        at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.handleParseFailure(StandardMultipartHttpServletRequest.java:122)
        at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:115)
        at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.<init>(StandardMultipartHttpServletRequest.java:88)
        at org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:87)
        at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1178)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1012)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

    尝试解决

    第一种可能性:spring本身的限制,需要进行设置,如下代码1(yml文件)代码2(properties文件),代码2未尝试,因为我用的是yml文件。

    代码1

    spring:
      servlet:
        multipart:
          max-file-size: 251658240
    spring.servlet.multipart.max-file-size=500MB
    spring.servlet.multipart.max-request-size=500MB

    第二种可能性:tomcat对上传文件有限制,设置如下代码,将该属性设置为-1即可

    server:
        max-http-form-post-size: -1

    第三种可能性:查看Nginx 是否有限制请求数据大小,未用到,未测试,仅记录。client_max_body_size 500M;必须打开,放开限制

    server {
            listen       80;
            #server_name  localhost;
            client_max_body_size 500M;
     
            #charset koi8-r;
     
            #access_log  logs/host.access.log  main;
     
        location /test/ {
            proxy_pass   http://127.0.0.1:8080/test/;
            }
    }

     最终成功的是第一种尝试,不过给定的参数需要是负一

     #文件大小 MB必须大写
     #  maxFileSize 是单个文件大小
     #  maxRequestSize是设置总上传的数据大小
     spring:
       servlet:
         multipart:
           enabled: true
           max-file-size: -1
           max-request-size: -1

    原因如下,通过查找源码所知

     翻译如下:

    返回完整HTTP请求的最大大小。如果HTTP请求超出此值,则会抛出{@link SizeLimitExceededException} *。 *默认情况下,此值将从{@link FileUploadBase#getSizeMax()* FileUploadBase}对象复制,但是,用户可以通过调用{@link #setSizeMax(long)}将默认值替换为*请求特定值在这个对象上。 * <em>注意:</ em>仅在尚未初始化迭代器的情况下,才可以设置此对象的最大大小。换句话说:如果尚未调用方法{@link #hasNext()},{@ link #next()}。 * @param pSizeMax整个HTTP请求的最大大小。值-1表示“无限制”。

    重点是最后一句话,@param pSizeMax整个HTTP请求的最大大小。值-1表示“无限制”

    但是为什么直接设置大小不起作用的原因还有待查找。

  • 相关阅读:
    Java关键字static、final使用小结
    JAVA的核心概念:接口(interface)
    Oracle数据泵导入导出数据,建立表空
    web.xml中load-on-startup的作用
    UIApplication 用法解析
    ios-Ineligible Devices 不被识别的设备
    Xcode真机测试could not find developer disk image解决方法
    异常捕获拒绝闪退 让应用从容的崩溃UncaughtExceptionHandler
    Xcode6之后创建Pch预编译文件
    MBProgressHUD的基本使用
  • 原文地址:https://www.cnblogs.com/qcq0703/p/14250703.html
Copyright © 2011-2022 走看看