springCloud负载均衡上传视频失败问题

本文解决SpringCloud微服务环境下,使用Zuul作为网关时出现的文件上传失败问题。通过调整restTemplate配置和设置文件系统资源为FileSystemResource,实现了文件的正确传输。

springCloud负载均衡上传视频失败问题

项目框架 springcloud微服务 + docker环境部署。
consul 用于服务注册和服务发现。
zuul做网关分发,实现拦截请求做反向代理。
ribbon工具restTemplate类来负载均衡。
下面是若干个客户端微服务。

但是在上传文件功能的时候就出现了问题,经过负载均衡器后,文件内容不能拿到,当时想的应该是restTemplate到客户端重定向的时候没把文件带过去。

既然这样,那就需要我们重新设置就可以了,代码如下

public String uploadCover(@RequestParam MultipartFile imageFile){

    String tempFileName = UUID.randomUUID() + imageFile.getOriginalFilename().substring(imageFile.getOriginalFilename().lastIndexOf("."));
    String tempFilePath = "/tmp/" + tempFileName;
    File tempFile = new File(tempFilePath);

    MultiValueMap<String,Object> requestEntity = new LinkedMultiValueMap<>();
    FileSystemResource resource = new FileSystemResource(tempFile);
    requestEntity.add("imageFile",resource);
    requestEntity.add("token", request.getParameter("token"));
    ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://xxxxx/xx", requestEntity, String.class);
    return responseEntity.getBody();
}

原理就是在负载均衡器先获取到文件,然后先设置一个路径,生成一个临时文件再new File重定向的时候带到客户端,重点的是类型要改成FileSystemResource。
再测试一下,已经可以上传成功了。
这里还有一个点要注意的,如果linnux下路径是没有权限的话,因为不能写临时文件就会报错。

然后上传一个比较大的文件,会报文件大小超出,不应该啊,负载均衡器和网关已经加上了最大文件大小

servlet:
  multipart:
    max-file-size: 100Mb
    max-request-size: 50Mb
    enabled: true

找了半天,原来文件太大超时了。。但是错误提示还是跟文件大小限制一样。。
网关加上超时时间就好了。

zuul:
  max:
    host:
      connections: 500
  host:
    socket-timeout-millis: 60000
    connect-timeout-millis: 60000

弄好了~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值