资讯专栏INFORMATION COLUMN

关于Spring Cloud Zuul网管上传文件乱码问题

Aceyclee / 1272人阅读

摘要:现在对于上传文件有两种处理方式,一种是用,另一种是。对文件处理不是很好,会导致乱码问题,则不会。如果没加前缀,就会置为,就会用上传。会出现乱码问题。在配置文件里面加上后面的值不填。到这里,问题算是结束了,最后把我们重写的那个方法注入到。

Spring Cloud Zuul现在对于上传文件有两种处理方式,一种是用spring mvc,另一种是zuulServlet。spring mvc对文件处理不是很好,会导致乱码问题,zuulServlet则不会。

那么怎么样让文件使用zuulServlet方式上传呢?现在普遍的解决方案是给url加上 /zuul的前缀,这确实是正确的,因为加了之后过滤器会使用zuulServlet。

关于过滤器的知识,下面这个链接解释的挺详细了
http://blog.didispace.com/spr...

在过滤器中,有一个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;
}

在这个方法中,IS_DISPATCHER_SERVLET_REQUEST_KEY为false就会用ZuulServlet处理。如果没加/zuul前缀,IS_DISPATCHER_SERVLET_REQUEST_KEY就会置为true,就会用spring mvc上传。会出现乱码问题。

那么我们的一个解决方案是在在进入下一个过滤器之前我们就把我们的文件上传的请求用ZuulServlet处理,所以我们可以重写这个方法,根据contentType判断请求如果是multipart就将IS_DISPATCHER_SERVLET_REQUEST_KEY置为false,那么它就会用ZuulServlet处理。

到这里还没有结束,还有一个很坑的地方,在最后以前pre过滤器中,他会对url进行处理。如果该请求是ZuulServlet处理的,那么他会把url的前面几位用的zuulServletPath替代,zuulServletPath默认就是刚才我们替代的前缀 /zuul。那么如果你不处理的话,你的请求路径将会变化。所以在这里我们将这个默认的zuulServletPath改成空值,就不会替换啦。在配置文件里面加上:
zuul.servletPath:
后面的值不填。
到这里,问题算是结束了,最后把我们重写的那个方法注入到spring。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67827.html

相关文章

  • SpringCloud(第 023 篇)简单文件上传微服务采取curl或者页面点击实现文件上传

    摘要:二实现步骤添加引用包模块客户端发现模块监控和管理生产环境的模块添加应用配置文件,默认,默认打印日志添加简单的上传文件页面添加上传文件控制器上传文件控制器。添加文件服务启动类简单文件上传微服务采取或者页面点击实现文件上传。 SpringCloud(第 023 篇)简单文件上传微服务采取curl或者页面点击实现文件上传 - 一、大致介绍 1、本章节主要搭建了一个简单的页面上传Web控制器,...

    wangbinke 评论0 收藏0
  • springCloud学习4(Zuul服务路由)

    摘要:但是如果将负载均衡器置于所有服务前便不是一个好主意,会造成瓶颈。服务超时使用的和库来进行请求。支持以下四种过滤器前置过滤器在将请求发送到目的地之前被调用。通常用于记录从目标服务返回的响应处理错误或审核敏感信息。 showImg(https://segmentfault.com/img/remote/1460000019531578); springcloud 总集:https://ww...

    wuaiqiu 评论0 收藏0
  • SpringCloud(第 024 篇)简单文件上传微服务加入zuul微服务后用zuul微服务地址实

    摘要:提供给文件上传微服务用的。注意注解能注册到服务上,是因为该注解包含了客户端的注解,该是一个复合注解。地址可以查看该微服务网关代理了多少微服务的。 SpringCloud(第 024 篇)简单文件上传微服务,并加入 zuul 微服务后用 zuul 微服务地址采取curl或者页面点击实现文件上传 - 一、大致介绍 1、本章节主要将文件上传微服务加入到 zuul 服务中去,然后利用 zuul...

    Cympros 评论0 收藏0
  • 阿里Sentinel整合Zuul网关详解

    摘要:前面我们讲解了整合,详细请查看文章阿里支持啦目前来说,大部分公司线上的网关应该是,所以今天我们就来看看如何在中整合。 前面我们讲解了Sentinel整合Spring Cloud Gateway,详细请查看文章:阿里Sentinel支持Spring Cloud Gateway啦 目前来说,大部分公司线上的网关应该是Zuul,所以今天我们就来看看如何在Zuul中整合Sentinel。本来想...

    miqt 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<