基于Nginx,Zuul,Springboot的大文件上传
一、前言
一共三环,三环都得配置文件大小等限制条件,缺一不可
二、配置
1、配置Nginx
配置请求体最大限制大小,超过则报错413,请求实体过大
server {
listen 8889;
client_max_body_size 1024M; #配置请求体最大限制大小,超过则报错413,请求实体过大
...
...
...
}
修改配置后执行
./nginx -s reload
2、配置zuul
①配置超时时间,按需配置,这里配置5分钟,hystrix配置的熔断时间应大于ribbon的超时时间,否则配置失败后重试便没有了意义
zuul:
host:
connect-timeout-millis: 300000
socket-timeout-millis: 300000
##hystrix的超时时间
hystrix:
command:
default:
execu tion:
timeout:
enabled: true
isolation:
thread:
timeoutInMilliseconds: 600000
##Ribbon超时
##Ribbon超时重试配置
ribbon:
ConnectTimeout: 20000 #毫秒 连接超时时间
ReadTimeout: 300000 #毫秒 逻辑处理超时时间
OkToRetryOnAllOperations: true # 是否对所有操作都进行重试
MaxAutoRetries: 3 # 对当前实例的最大重试次数(请求服务超时6s则会再请求一次)
MaxAutoRetriesNextServer: 2 # 切换实例的最大重试次数(如果还失败就切换下
②配置zuul对于文件的支持,enabled如果配置false,则zuul不会对文件进行处理,并不意味着绕过了zuul,zuul会把请求体中的文件屏蔽掉,所以你会在后台看到报错请求中的文件在请求体中不存在的错误,所以要想让文件经过zuul,必须开启为true
spring:
application:
name: service-zuul
servlet: # 此版本的节点为servlet,不是http 注意一下
multipart:
enabled: true # 启用上传处理,默认是true
file-size-threshold: 10MB # 当上传文件达到1MB的时候进行磁盘写入
max-request-size: 1024MB # 设置最大的请求文件的大小
max-file-size: 1024MB # 设置单个文件的最大长度
location: /usr/local/filetemp #配置磁盘写入的目录,需要注意权限问题
让文件绕过zuul的方法,不经过zuul,请求体中的文件也就不会被屏蔽掉,方法如下
如果在zuul中配置了对项目的路由,就可以进行如下操作
原本请求的路径为
http://ip:port/test/file/upload
更改为
http://ip:port/zuul/test/file/upload
3、配置springboot对于文件的拦截,按需配置
spring.servlet.multipart.max-file-size=1024MB
spring.servlet.multipart.max-request-size=1024MB
4、GridFS注意事项
注意配置chundSize,不要配置的太大了,否则有可能导致文件上传失败,这里配置的是10MB
GridFSFile gridFSFile=new GridFSFile(bsonValue,image.getName(),image.getSize(),1024*1024*10, DateUtil.getNow(),document);