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://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