今天实现上传功能时突然发现报错,显示文件个数超限,让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
重试,功能正常,问题解决
理论上不应该一次性把请求的文件跟表单一起提交,图省事是会这样
573

被折叠的 条评论
为什么被折叠?



