前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何破解springboot/springcloud上传中文文件名乱码魔咒

如何破解springboot/springcloud上传中文文件名乱码魔咒

作者头像
lyb-geek
发布2018-08-06 18:38:24
8.4K0
发布2018-08-06 18:38:24
举报
文章被收录于专栏:Linyb极客之路Linyb极客之路

上传文件名为中文的文件会乱码缘由

上传文件的页面会以页面指定的编码格式对上传的数据进行编码,MultipartFile 在接收数据时会以系统默认的编码解码上传数据,如果页面编码与系统编码不一致,则会导致乱码。

springboot/springcloud上传中文文件名乱码解决方法

方法一:在application.properties或者application.yaml添加如下参数配置

代码语言:javascript
复制
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8
在yaml文件配置内容也是一样,仅仅是格式不一样,这边就不论述

方法二:定义一个mvc配置类,代码如下

代码语言:javascript
复制
@Configuration
public class CustomMvcConfigurerAdapter extends WebMvcConfigurerAdapter {

    @Bean
    public HttpMessageConverter<String> responseBodyConverter() {
        StringHttpMessageConverter converter = new StringHttpMessageConverter(
                Charset.forName("UTF-8"));
        return converter;
    }

    @Override
    public void configureMessageConverters(
            List<HttpMessageConverter<?>> converters) {
        super.configureMessageConverters(converters);
        converters.add(responseBodyConverter());
    }

    @Override
    public void configureContentNegotiation(
            ContentNegotiationConfigurer configurer) {
        configurer.favorPathExtension(false);
    }
}

方法三:在上传文件的代码中,添加如下代码

代码语言:javascript
复制
String fileName = new String(file.getOriginalFilename().getBytes("ISO-8859-1"),"UTF-8");

如果以上三种方案都没办法解决,接下来就要思考下文件的上传流程,比如是否有通过网关之类的。接下来介绍当通过zuul来进行路由上传,文件中文名乱码问题的解决方式。

zuul上传文件的处理方式

1、通过spring mvc的DispatcherServlet进行处理,这种方式对文件处理不是很好,会导致中文文件名乱码问题 2、通过ZuulServlet进行处理,这种方式中文文件名则不会乱码

zuul网关将所有带/zuul请求的请求都走Zuulservlet,不带zuul的请求都走spring mvc的Dispatchservlet。因此在请求上传文件url加上/zuul的前缀,即可解决中文文件名乱码问题

比如原来的文件请求路径为:localhost:8080/file/upload 修改为 localhost:8080/zuul/file/upload

这种方案比较适用于一开始就是以zuul作为网关。但如果zuul是项目已经运行一段时间后期才加上,而此时客户端访问上传的api url也已经固定成型,通过上面那种方式去改动,改动量可能会比较多。那有没有办法解决这个问题,答案当然是没有,怎么可能。。。所以推荐使用如下的方式

在zuul工程的application.yml添加如下配置

代码语言:javascript
复制
zuul:
  servlet-path: /

采用这种方式,客户端不需要做任何改动

总结

文件上传中文文件名乱码是一个很常遇见的问题,遇到这种常见问题,用常用的方式没办法解决时,可以梳理一下逻辑,理一下思路,可能就会有柳暗花明的效果

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linyb极客之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 上传文件名为中文的文件会乱码缘由
  • springboot/springcloud上传中文文件名乱码解决方法
  • zuul上传文件的处理方式
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档