Zuul 上传大文件服务报错的问题

上传大文件时,服务报以下错误

org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'file' is not present

一开始以为是服务问题,看报错信息,显示file没有,这个信息不太准确。之前设定了上传大小为50M,超过50M时会报超出大小的异常,也会抛出上面这个异常。

spring:

  servlet:

    multipart:

      enabled: true

      max-file-size: 150MB

      max-request-size: 150MB

之后设置了上传大小之后,错误消失了,但之前上传的文件一般在80M以下,没试过更大的文件,这次上传的文件达到90几M,于是一直在报这个错。因为上面抛的这个异常类似于tomcat容器在接收数据时,数据不全,才会触发后面没有文件这个异常,所以猜测是文件没有传到服务里面,在前面就断掉了。于是直连服务上传了一下,发现是好的,验证了我的猜测。那问题肯定就在zuul上了,因为zuul是对外暴露的唯一入口,不管普通接口还是文件上传都会调用zuul。

定位是zuul的问题,但没找到具体是什么问题,一开始猜测是不是zuul调用服务超时了,因为上传大文件时间比较长,zuul调用服务时间过长,就断开连接了。

ribbon:

  ConnectTimeout: 60000

  ReadTimeout: 60000

zuul:

  host:

    socket-timeout-millis: 60000

connect-timeout-millis: 60000

把zuul超时时间设置为1分钟,然后再尝试,发现大概15s左右zuul就会显示调用失败,而服务中还是报那个错。这么看是zuul在上传了文件一段时间之后就断开了,但文件没传完,具体原因不得而知。

到Sping 官网上查遍了资料,发现了下面这个:

https://cloud.spring.io/spring-cloud-static/spring-cloud.html#_uploading_files_through_zuul

意思是在上传大文件时,可以在调用的服务前面加/zuul/,以绕过multipart processing,这个是用来上传时检查文件大小之类的。于是在调用的服务前面加/zuul/再试了一下,果然好了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值