工作记录:图片上传,后台无法接收参数
一、问题描述
在项目中,有一个图片上传的功能,使用Base64
来将图片解析成字符串,再放在请求体中传给接口。由于涉及到文件上传,首先是在spring-mvc.xml
中设置了文件上传的大小。在自己测试过程中,上传图片的接口是可以正常使用的。然而,在发布到测试环境由测试人员进行集成测试的时候,发现该接口在上传高清图片时,接口会报错。
spring-mvc.xml 配置:
<!-- spring-mvc.xml 文件上传配置 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--设置上传文件最大尺寸,为10M -->
<property name="maxUploadSize" value="10485760"/>
<property name="maxInMemorySize" value="4096"/>
</bean>
二、问题排查
针对上传图片接口报错的问题,首先是去查看服务器上tomcat/logs/catalina.out
的日志文件,发现拦截器打印的请求参数为空,即接口无法接收到前端传递的参数。之后打开chrome开发者工具
时,并调用接口,发现前端请求接口时是有传递参数的,但是接口就是会无法获取到参数。之后带着问题去百度,找到了产生问题原因所在。
因为Tomcat
默认的POST
最大字节是2097152b(即2Mb)
,当上传的图片大于2M
时,就会导致无法正常的进行请求,所以才会出现接口无法获取参数的问题。
以下是Tomcat
官网对于POST
请求大小的描述
The maximum size in bytes of the POST which will be handled by the container FORM URL parameter parsing. The limit can be disabled by setting this attribute to a value less than zero. If not specified, this attribute is set to 2097152 (2 megabytes). Note that the FailedRequestFilter can be used to reject requests that exceed this limit.
三、问题解决
通过设置tomcat/conf/server.xml
文件中的maxPostSize
的值即可解决。
server.xml 配置
<!-- server.xml,设置maxPostSize的值 -->
<Connector port="7061" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="7060"
useBodyEncodingForURI="true"
URIEncoding="UTF-8"
maxPostSize="10485760"/>
由于我在spring-mvc.xml
中设置了文件上传的大小限制是10M
。因此为了统一,将maxPostSize
同样设置为10485760
。如果想要禁用上传文件大小限制,可以将值设置为-1
。
参考:
tomcat7.0 文档
tomcat8.0 文档
tomcat8.5 文档
Tomcat下post请求大小设置
PS:
- 本人使用的
tomcat
版本为8.5.31
- 在网络上百度时,发现有一种解决方案是将
maxPostSize
设置为0
,但是在设置之后,未起效。后来查阅了Tomcat
官方的文档,文档上说明是将maxPostSize
的值设置为小于零,即可禁用限制 - 在完成上述配置之后,需要重启
tomcat
,让设置起效 - 阅读此篇文章任何疑问、意见或建议,欢迎下方评论,我会及时回复。