最近这个问题一直困惑着项目组。文件上传,请求不经过zuul的时候,一切正常。没有出现乱码问题。一旦请求经过zuul,上传后获得的文件名,就会出现中文乱码问题。中文会变成???
下面贴出来我zuul的部分配置:
zuul:
sensitive-headers: Access-Control-Allow-Origin
ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Token,APPToken #需要忽略的头部信息,
不再传播到其他服务
host:
connect-timeout-millis: 60000
socket-timeout-millis: 60000
retryable: true
routes:
product:
path: /v2.0/lls/product/**
serviceId: lls-cloud-product-server
sensitiveHeaders: "*" # Zuul默认是不转发请求头或会过滤掉一些重要的头信息的,无法正确获取
session,增加此配置解决shiro的session问题。
后来研究出来一种方法是这样的。在zuul下面添加如下配置,
servlet-path: / #解决文件上传时中文乱码问题,如果不加这行配置,文件上传遇到中文都会变成?号。
但是也会有问题。问题就是:如果加上这句,确实可以解决乱码问题,但是swagger却出不来了。把这句注释掉,swagger可以出来,但是会乱码。感觉这不是解决问题的方法。
真正的解决步骤如下:
1.如上zuul的配置不变。不需要加servlet-path
2.我原来上传文件的路径是http://localhost:port/v2.0/lls/product/fileUpload
只需要在原来上传文件的路径端口后加/zuul即可解决。如下:
http://localhost:port/zuul/v2.0/lls/product/fileUpload
其他的什么都不用改
所以呢,在此建议大家把文件上传的接口做成一个公共的接口,所有的文件上传都走一个方法。如果有其他业务需要用到文件上传的信息的话,只需要进行主外键关联即可。代码层面只需要使用父子类继承。