基于Nginx,Zuul,Springboot,GridFS的大文件上传

基于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);

三、测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值