上传文件大小导致失败

【问题场景】 在本地开发环境,上传超过2MB的数据都可以成功上传至服务器。但是,在测试环境出现上传超过200K就会失败的问题。 前端使用的是springMVC,中间件使用Nginx + Tomcat

【排查方法】 1、检查不同环境下的spring配置文件中,上传文件大小限制

<!-- 配置多文件上传 -->
<bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
      <property name="defaultEncoding">
            <value>UTF-8</value>
      </property>
      <property name="maxUploadSize">
            <!-- 上传文件大小限制为31M,31*1024*1024 -->
            <value>32505856</value>
      </property>
      <property name="maxInMemorySize">
            <value>4096</value>
      </property>
</bean>

两个环节的代码都是同样的配置,没有问题,排查spring问题

2、检查两个环境的tomcat配置 conf/server.xml

<connector port="8080"    
   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"    
   enableLookups="false" redirectPort="8443" acceptCount="100"    
   debug="0" connectionTimeout="20000"     
   disableUploadTimeout="true" URIEncoding="utf-8"    
   maxPostSize="0"></connector>    

当maxPostSize<=0时,POST方式上传的文件大小不会被限制。配置一致,排除tomcat配置问题, 注意:maxPostSize参数只有当request的Content-Type为“application/x-www-form-urlencoded”时起作用。 参考资料 https://blog.csdn.net/lafengwnagzi/article/details/72846195

3、检查两个环境的nginx配置

server  
{  
    listen   80;  
    server_name  chat.erp.360buy.com;  
    #access_log    /export/servers/nginx/logs/chat.erp.360buy.com;  
    location / {  
        proxy_pass     http://tomcat;  
        client_max_body_size    1000m;  
    }  
}  

最终发现,测试环境的nginx配置不一致导致,问题定位成功 参考资料 https://blog.csdn.net/bruce128/article/details/9665503

【总结】 需要问题不要着急,先自查,从自己的代码入手。如果代码确认没有问题,就外范围扩大,看一下外部环境是否存在问题,一般情况都可以准确定位。