解決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表示“無限制”

但是為什么直接設置大小不起作用的原因還有待查找。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM