大文件上传 The field file exceeds its maximum permitted size of xxx bytes.

 

今天在页面上做一个文件上传,之前上传的文件相对较小,基本不会超过10M,一直也运行得挺好。今天要上传一个功能,大小大概是80M左右,然后在页面的文件上传请求,一直在pending,然后过了大概一两分钟,页面还在转,看接口,是显示:"this request has no response data available",接口已经无响应或已经响应超时。

怎么回事呢,一开始是以为nginx 上做了文件大小限制,或连接超时时长调整得太小,然后一波操作,在nginx上添加了如下配置:
client_max_body_size     50m; 
client_header_timeout    1m;
client_body_timeout      1m;
proxy_connect_timeout     3m;
proxy_read_timeout      3m;
proxy_send_timeout      3m;

 

然后发现,根本不太顶用,怎么办呢。。。再查一下,

 

有新发现,在文件上传服务报了一个错:“Java The field file exceeds its maximum permitted size of xxx bytes” , 原来 springboot 是有一个配置限制的,默认是10M,但这个服务上显示的是50M,默认肯定不是这个数据,看来是服务已经做过了配置,但配置的大小不是太够。

嗯,然后找到如下资料:

Spring Boot1.4版本后配置更改为:
spring.http.multipart.maxFileSize = 10Mb  
spring.http.multipart.maxRequestSize=100Mb  


Spring Boot2.0之后的版本配置修改为:
spring.servlet.multipart.max-file-size = 10MB 
spring.servlet.multipart.max-request-size=100MB

 

行,加上吧,于是在这个服务的配置中心上加上了这么一个项,重启服务,emm,发现没有达到预期,会不会是配置的方式不对呢?

换了一种写法,还是不行,果然这种在机率是无效操作。。。那怎么办呢

 

这个时候又看到了另外一个解决方案:

在 application.properties中添加以下配置:
multipart.maxFileSize=50Mb
multipart.maxRequestSize=100Mb

如果配置不生效,还需要添加这样的 bean配置项:
  @Bean
    public MultipartConfigElement multipartConfigElement(@Value("${multipart.maxFileSize}")String maxFileSize,@Value("${multipart.maxRequestSize}") String maxRequestSize) {
      MultipartConfigFactory factory = new MultipartConfigFactory();
      factory.setMaxFileSize(maxFileSize);
      factory.setMaxRequestSize(maxRequestSize);
      return factory.createMultipartConfig();
    }

坦白说,一开始并不太想使用这样的方案,如果使用配置可以完成的事情,实在不太想再加配置类。。。

 

再捣鼓了一下,无意中发现,,,现代码也就是使用了后面这种方法,但是!它的配置项非常的自定义,就基本不太让人想得到,也难怪一开始用关键词去搜索的时候,啥也找不到。

好了,既然已经有这样配置,那就按它描述的这样,修改配置项但好了。

 

然后,改过配置项,让服务重新加载,emmm, OK了。

 

其实以上两种方案应该都可以,只是因为本项目中使用了方案二,然而那个配置项又是比较特别,一时间没有找到,所以也就花了一些时间。代码规范一些还是很重要啊。。。

 

posted @ 2022-07-11 20:35  aaacarrot  阅读(656)  评论(0编辑  收藏  举报