上傳文件過大時的報錯:
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表示“無限制”
但是為什么直接設置大小不起作用的原因還有待查找。