springcloud 上传文件获取文件名乱码

项目使用路由zuul,用HttpServletRequest接收文件参数时,file.getOriginalFilename()名称乱码。Spring Cloud Zuul上传文件有spring mvc和zuulServlet两种处理方式,spring mvc会导致乱码,zuulServlet不会。一般外部请求由DispatcherServlet处理,/zuul/路径请求由ZuulServlet处理。

项目中使用了路由zuul。
用HttpServletRequest接收文件参数
使用 MultipartHttpServletRequest multi = (MultipartHttpServletRequest) httpServletRequest;
file.getOriginalFilename()得到的名称时乱码。
此时在网关项目中添加

zuul:
  servlet-path: /

Spring Cloud Zuul对于上传文件有两种处理方式,一种是用spring mvc,另一种是zuulServlet。spring mvc会导致乱码问题,zuulServlet不会。在zuul的过滤器中,有一个pre的过滤器 ServletDetectionFilter,他的执行顺序是-3,也是最先执行的过滤器,在这个过滤器中,有这么一段代码:

@Override
public Object run() {
    RequestContext ctx = RequestContext.getCurrentContext();
    HttpServletRequest request = ctx.getRequest();
    if (!(request instanceof HttpServletRequestWrapper) 
            && isDispatcherServletRequest(request)) {
        ctx.set(IS_DISPATCHER_SERVLET_REQUEST_KEY, true);
    } else {
        ctx.set(IS_DISPATCHER_SERVLET_REQUEST_KEY, false);
    }
 
    return null;
}

用来判断使用springmvc 还是zuulServlet,IS_DISPATCHER_SERVLET_REQUEST_KEY为false就会用ZuulServlet处理。如果没加/zuul前缀,IS_DISPATCHER_SERVLET_REQUEST_KEY就会置为true,就会用spring mvc上传。一般情况下,发送到API网关的外部请求都会被Spring的DispatcherServlet处理,除了通过/zuul/路径访问的请求会绕过DispatcherServlet,被ZuulServlet处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值