背景

最近做一个文件上传服务,所以接口必须经过网关(zuul)调用。前后断分离后前端使用vue开发,后台是springcloud微服务。但是在文件上传时,出现文件名中文乱码的问题,multipart file取出来的文件名中文乱码。

排除思路

1.检查前端请求头是否正确
2.检查网关是否有问题
3.比较经过网关调用接口和不经过网关直接调用接口中文是否乱码

备注:1,2,都没有问题。测试3时,发现不经过网关时,中文不会乱码,一旦经过网关就会出现乱码问题,那么问题的定位就知道了。经过网关时,肯定是zuul进行了某些处理(后面详细讲解解决方案时,进行讲解)。

解决方案

1.接口访问前加上zuul

比如说:
问题接口:http://xxxxxxx/v1/fileupload/oss/upload
修正接口:http://xxxxxxx/zuul/v1/fileupload/oss/upload
该种方案解决了中文乱码问题,但是前端需要针对上传接口做特殊处理,
这样对于前端同学来说是不合理的,前端做了代理接口,就因为乱码问题需要做特殊处理
,这并不合理。而且问题的原因在于网关做了处理,所以对于前端同学来说为此付出
不符合职责划分。

2.配置zuul的servlet-path为/

该种方式是在网关的配置文件中,加入如下配置
zuul:
    servlet-path: /

该种方式是在网关解决了问题,我个人比较推荐这种方式去解决,前端后端都不需要做任何多余的处理或者特殊处理,只需要加一个配置而已。

出现问题第一反应就是进入官方文档进行查找。
Zuul文件上传代理官方文档