SpringBoot项目中需要上传文件,突然出现当文件大于1MB时,接口完全无法访问的情况,打开Fiddler,接口直接报红,说明根本就没有进入到接口。
  那么出现这种问题的原因是什么了?多方查阅资料和结合实际情况,才发现是公司换了服务器,使用了Nginx,运维人员又没有做相应的配置,这样Nginx默认最大能够上传1MB文件,大于1MB的文件自然无法上传。

解决方案如下:
  打开nginx.conf(没权限找运维人员)在http{ }中设置:client_max_body_size 50m,即:

client_max_body_size 50M

  重启Nginx即可。当做完这些依然无效时,请检查网关(zuul)是否对文件上传也做了限制。

##打开自定义以配置
spring.http.multipart.enabled=true
##最大单文件限制
spring.http.multipart.max-file-size=50MB
##总上传的数据大小
spring.http.multipart.max-request-size=50MB

  重启网关(不重启没效果),依然不起作用,继续检查Spring或者SpringBoot的配置, 如果出现

org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field pic exceeds its maximum permitted size of 1048576 bytes.

org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field pic exceeds its maximum permitted size of 1048576 bytes.

  因为springboot内置tomact的的文件传输默认为1MB,大于1MB的文件是无法上传的,加入配置(我的SpringBoot版本为1.5.6)

#配置开启,打开自定义
spring.http.multipart.enabled =true  
##可以不要
spring.http.multipart.file-size-threshold =0
#最大单文件限制小
spring.http.multipart.max-file-size = 50MB
#总数据的大小
spring.http.multipart.max-request-size=50MB

  Springboot 2.0之后的版本,需要改变:

#单文件限制大小
spring.servlet.multipart.max-file-size = 50MB
#总文件限制的大小
spring.servlet.multipart.max-request-size=50MB

总结

文件无法上传大概就只有以下四个方面的原因

  1. 服务器对上传文件带下做了限制(Nginx,Apache,IIS等服务器,文中仅对Nginx配置做了说明)
  2. 网关对上传文件大小做了限制,此时添加配置即可。
  3. SpringBoot/Spring对上传文件大小做了限制,添加配置即可。
  4. 文件确实过大,前后端链接超时,自动断开链接(可自己设置,不做详述)