项目场景:
项目是一个 VUE + Spring Boot(后台) + web API(C#)(后后台)的项目
主要是实现一个信息发布功能。VUE负责界面,SpingBoot用作后台,WebApi是原来旧的信息发布系统的接口,为了方便开发,就进行了复用。
问题描述
主要问题出现在文件上传部分,即SpringBoot调用WebApi接口,将【用Byte[]数组来存储文件信息的数据】Post给WebApi的时候:
//SpringBoot向WebApi Post数据
String resString = MyHttpClientUtils.post(baseUrl, JSON.toJSONString(accessoryRequest));
//WebApi Controller接收数据
public ResponseMsg Post([FromBody]AccessoryDetailRequest request)
{......}
当文件小于3M左右(也没有太多的尝试得到特别精确的值)的时候,SpringBoot接口能接收到上传的file,也明确的回传了,WebApi 后台返回成功;
但当文件大于3M,到达4,5M时候,SpringBoot接口也同样能接收到上传的file,也明确的回传了,但WebApi 后台返回失败。
随后我对于第一、第二种情况都进行了WebApi本地debug调试,第一种情况能接收到完整的request,但第二种情况就发现接收到的request为null【除了文件大小改变外,没有任何的区别。】。
原因分析:
大概猜测问题应该在SpringBoot上,可能是SpringBoot在Post其他接口的时候会限制Post传输数据的大小。也找了一些解决方案
(https://www.cnblogs.com/6324/p/10470690.html)
(https://qyyshop.com/info/983496.html)
也在SpringBoot项目中的application.yml中加入如下的配置:
spring:
#请求数据大小限制参数配置
servlet:
multipart:
#默认支持文件上传
enabled: true
#指定上传文件的最大文件大小,默认1MB
max-file-size: 100MB
#指定在文件上传或表单请求中允许的最大请求数据,默认1MB
max-request-size: 100MB
#Tomcat-Post请求超限制
server:
tomcat:
# post请求不设大小限制的时候设置 -1,小于0即可,当然这个也要看使用的tomcat版本,具体的请看着这篇文章
# 【https://blog.csdn.net/m0_67401920/article/details/124471237】
max-http-form-post-size: 1024MB
max-swallow-size: 1024MB
数值改成-1也试过,但是都不管用。
解决方案:
后来发现,问题可能在WebApi的请求长度限制上。找到了解决方案
(https://blog.csdn.net/qq_25298175/article/details/133355507)
(https://blog.csdn.net/ZeroRm/article/details/118026549)
maxRequestLength:指示 ASP.NET 支持的最大文件上载大小。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以 KB 为单位。默认值为 4096 KB (4 MB)。
executionTimeout:表示允许执行请求的最大时间限制,单位为(秒)。
在web.config中加入如下的配置:
<system.web>
<!--最大请求长度,单位为kb-->
<httpRuntime maxRequestLength="20480" />
</system.web>
最后成功调用。
我只能说这个问题太抽象了,一步一坑。