赞
踩
在做项目时有一个上传文件的需求,文件过大时前端报错
413 Request Entity Too Large
解决步骤
1.百度后,因为项目使用了nginx负载均衡,需要修改nginx配置文件,找到nginx.conf文件在其中增加
client_max_body_size 50m;//设置客户端请求体最大值
client_body_buffer_size 10m;//配置请求体缓存区大小
具体的位置查了下,放在http{}下或者server{}下好像没什么区别,http{}中没有就会自动加载代理的server{}下。
可是,配置完后前端确实不报错了,后端又有问题了,后端接受不到请求了???
2.继续百度,发现可能跟springboot配置的文件上传大小限制有关,于是去配置application.yml文件,扩大max-file-size和max-request-size。(springboot2.0是下面的配置,老版本将servlet换成http)
spring:
servlet:
multipart:
#默认支持文件上传.
enabled: true
#支持文件写入磁盘.
file-size-threshold: 0
# 上传文件的临时目录
location:
# 最大支持文件大小
max-file-size: 50MB
# 最大支持请求大小
max-request-size: 50MB
如果配置文件觉得格式很麻烦,可以在启动类以代码形式配置
@MapperScan("com.xxx.xxx.dao") @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication .class, args); } @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); //文件最大 factory.setMaxFileSize(DataSize.parse("50MB")); //设置总上传数据总大小 factory.setMaxRequestSize(DataSize.parse("50MB")); return factory.createMultipartConfig(); } }
配置后 后端可以收到请求了,但是文件上传时又报错了…报错信息为
java.netSocketTimeoutException:Read timed out
3.根据报错信息知道是连接超时,我的需求是需要将文件上传到fastdfs文件系统中,然后将信息写入到mysql中,而因为文件过大,自然过程就慢了,所以需要去application.yml配置下连接池的超时时间
spring:
datasource:
druid:
url: jdbc:mysql://localhost:3306/alumnihome?serverTimezone=GMT%2B8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
initial-size: 5 #初始建立连接数量
min-idle: 5 #最小连接数量
max-active: 20 #最大连接数量
max-wait: 10000 #获取连接最大等待时间,毫秒
test-on-borrow: true #申请连接时检测连接是否有效
test-on-return: false #归还连接时检测连接是否有效
time-between-eviction-runs-millis: 60000 #配置间隔检测连接是否有效的时间(单位是毫秒)
min-evictable-idle-time-millis: 300000 #连接在连接池的最小生存时间(毫秒)
将其中的min-evictable-idle-time-millis即 连接在连接池的最小生存时间增加,我直接加了个0,然后文件成功上传,解决问题~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。