处理报错:org.apache.tomcat.util.http.fileupload.impl.FileCountLimitExceededException
今天实现上传功能时突然发现报错,显示文件个数超限,让AI处理结果没处理好,那就只能人工介入了,发现请求总共就带了两三个文件,怎么会呢,前端代码附上
$.ajax({ url: "xxx", data: formData, type: 'POST', processData: false, contentType: false, success: function (data) { console.log(data) }, error: function () { console.log("提交失败") } })报错现象如下
org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.handleParseFailure(StandardMultipartHttpServletRequest.java:132) at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:111) at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.<init>(StandardMultipartHttpServletRequest.java:87) at org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:112) ... Caused by: org.apache.tomcat.util.http.fileupload.impl.FileCountLimitExceededException: attachment at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:459) at org.apache.catalina.connector.Request.parseParts(Request.java:2650) at org.apache.catalina.connector.Request.getParts(Request.java:2536) at org.apache.catalina.connector.RequestFacade.getParts(RequestFacade.java:773) at jakarta.servlet.http.HttpServletRequestWrapper.getParts(HttpServletRequestWrapper.java:315) at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:94)跟进org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(RequestContext)代码看看
仔细一看,发现multipart解析器将所有表单字段(包括普通文本字段)都计算在内,当总数超过服务器配置的限制时就会抛出异常
那就跟进引用代码org.apache.catalina.connector.Request.parseParts(boolean),发现跟maxParameterCount和maxPartCount有关
maxParameterCount默认值就很大,可忽略
那就是跟maxPartCount有关
那这就简单了,这个值可以通过配置文件配置处理
server: tomcat: max-part-count: 200 # 设置最大部件数量为200重试,功能正常,问题解决
理论上不应该一次性把请求的文件跟表单一起提交,图省事是会这样
