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

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 requestEntity = new LinkedMultiValueMap<>();
    FileSystemResource resource = new FileSystemResource(tempFile);
    requestEntity.add("imageFile",resource);
    requestEntity.add("token", request.getParameter("token"));
    ResponseEntity responseEntity = restTemplate.postForEntity("http://mission-customer-service/customer/publishManager/uploadCover", 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

你可能感兴趣的:(springCloud负载均衡上传视频失败问题)