文档章节

Springmvc 上传文件 ,文件名中文乱码

鱼中鱼
 鱼中鱼
发布于 2016/11/22 11:55
字数 321
阅读 537
收藏 0
点赞 0
评论 0

Springmvc 上传文件 ,文件名中文乱码。

spring 编码过滤器,tomcat,请求页面的编码都是utf-8,但接收到的中文文件名还是变成乱码了。

最后怀疑是 CommonsMultipartResolver编码问题,用以下方式查看后,都是utf-8
    public class MyMultipartResolver extends CommonsMultipartResolver { 
        private static final Log log = LogFactory.getLog(MyMultipartResolver.class);  
      
        //fileItem.getContentType() >request.getCharacterEncoding()> FileUpload().getHeaderEncoding > WebUtils.DEFAULT_CHARACTER_ENCODING  
        //表单元素的编码规则:fileItem.getContentType() >  determineEncoding(request) = request.getCharacterEncoding()> FileUpload().getHeaderEncoding > WebUtils.DEFAULT_CHARACTER_ENCODING  
        @Override  
        protected String determineEncoding(HttpServletRequest request) {  
            String encoding = request.getCharacterEncoding();  
            log.debug(" request.getCharacterEncoding --->" + encoding );  
            if (encoding == null) {  
                encoding = getDefaultEncoding();  
                log.debug(" getDefaultEncoding --->" + encoding );  
            }  
            return encoding ;   
        }  
      
        // CUSTOM  Encoding  
        @Override  
        protected String getDefaultEncoding() {  
            String encoding = getFileUpload().getHeaderEncoding();  
            log.debug(" getFileUpload().getHeaderEncoding --->" + encoding );  
            if (encoding == null) {  
                encoding = WebUtils.DEFAULT_CHARACTER_ENCODING;  
                log.debug(" WebUtils.DEFAULT_CHARACTER_ENCODING --->" + encoding );  
            }  
            return encoding;  
        }  
          
        @SuppressWarnings("unchecked")  
        protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {  
            String encoding = determineEncoding(request);  
            log.debug(" determineEncoding --->" + encoding );  
            FileUpload fileUpload = prepareFileUpload(encoding);  
            try {  
                List<FileItem> fileItems = ((ServletFileUpload) fileUpload).parseRequest(request);  
                return parseFileItems(fileItems, encoding);  
            }  
            catch (FileUploadBase.SizeLimitExceededException ex) {  
                throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex);  
            }  
            catch (FileUploadException ex) {  
                throw new MultipartException("Could not parse multipart servlet request", ex);  
            }  
        }  
      
           
        protected FileUpload prepareFileUpload(String encoding) {  
            FileUpload fileUpload = getFileUpload();  
            FileUpload actualFileUpload = fileUpload;  
      
            // Use new temporary FileUpload instance if the request specifies  
            // its own encoding that does not match the default encoding.  
            if (encoding != null && !encoding.equals(fileUpload.getHeaderEncoding())) {  
                actualFileUpload = newFileUpload(getFileItemFactory());  
                actualFileUpload.setSizeMax(fileUpload.getSizeMax());  
                actualFileUpload.setHeaderEncoding(encoding);  
            }  
            log.debug(" actualFileUpload  HeaderEncoding--->" + actualFileUpload.getHeaderEncoding() );  
            return actualFileUpload;  
        }  
      
      
    }  

最终看到了这个:

HttpEntity entity = MultipartEntityBuilder.create()

            .setMode(HttpMultipartMode.RFC6532)//BROWSER_COMPATIBLE自定义charset,RFC6532=utf-8,STRICT=iso-8859-1

            .addTextBody("name", testFile, textUtf8)//中文文件名还是需要传utf-8编码

            .addBinaryBody("file"new File(testFile))

            .build();

只有用这个HttpMultipartMode.RFC6532上传才是对的。

© 著作权归作者所有

共有 人打赏支持
鱼中鱼
粉丝 12
博文 22
码字总数 7321
作品 0
浦东
文件上传+下载

1.文件上传 1)Springmvc下上传两个方式 CommonsMultipartResolver:利用commons-fileupload中jar。 StandardServletMultipartResolver:Servlet3.0以上版本,利用Servlet中Part接口。 补充说...

warlockssss ⋅ 2016/09/23 ⋅ 0

springmvc 上传文件时,文件名名称乱码?

使用testtemplate调用spring mvc接口上传文件时,文件名称为中文, 我使用了LinkedMultiValueMap作为上传的参数。然而在springmvc接收参数时,name = multipartFile.getOriginalFilename(),...

老君20111 ⋅ 05/30 ⋅ 0

上传文件,经过Zuul,中文文件名乱码解决办法

转载请标明出处: http://blog.csdn.net/forezp/article/details/77170470 本文出自方志朋的博客 问题描述 在项目中又一个上传文件的oss服务,直接调用服务的上传文件成功,如果经过网关zuu...

forezp ⋅ 2017/08/14 ⋅ 0

Video-No.01 李守宏_SpringMVC基础与应用视频教程

1、SpringMVC基本配置 1)引入spring Jar包 2)配置web.xm文件,加载SpringMVC配置 <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc......

shawntime ⋅ 2015/03/22 ⋅ 0

SpringMVC文件上传

1、配置文件上传解析器 <!--配置文件上传解析--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean> 2、解决中文文件名乱码......

有资本再款 ⋅ 2015/09/09 ⋅ 0

spring boot 解决后台返回 json 到前台中文乱码之后出现返回json数据报错 500

问题描述 spring Boot 中文返回给浏览器乱码 解析成问号?? fastJson jackJson spring boot 新增配置解决后台返回 json 到前台中文乱码之后,出现返回json数据报错:no convertter for retur...

陈守印 ⋅ 06/15 ⋅ 0

KnowledgeTree 的中文问题?

ktdms 3.7.0.2批量上传一个中文名的目录,该目录下有很多中文命名的文件. 批量上传提示成功了,但中文文件名显示乱码,该中文目录名字也是乱码. 当然批量下载后,中文名还是乱码. 看来是ktdms的一...

MartinKing ⋅ 2011/11/02 ⋅ 1

Spring Boot基础教程12-web应用开发-文件上传

一、Spring Boot 默认使用springMVC包装好的解析器进行上传 二、添加代码 文件: @Controller @RequestMapping(value = "/file")...

芝麻绿豆 ⋅ 2017/04/06 ⋅ 0

Spring Boot基础-web应用开发-文件上传

一、Spring Boot 默认使用springMVC包装好的解析器进行上传 二、添加代码 文件: @Controller @RequestMapping(value = "/file")...

登录404 ⋅ 2016/10/31 ⋅ 0

zabbix中文乱码

安装完zabbix之后,调整中文界面发现字体乱码,创建数据库制定字符集为utf8。其实原因是zabbix使用DejaVuSan.ttf字体,不支持中文,导致中文出现乱码。解决方法很简单,把我们电脑里面字体文件...

攻城狮赵峰 ⋅ 01/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Netweaver和SAP云平台的quota管理

Netweaver 以需要为一个用户上下文(User Context)能够在SAP extended memory区域中分配内存尺寸创建quota为例。 对于Dialog工作进程,使用事务码修改参数 ztta/roll_extension_dia. 对于非D...

JerryWang_SAP ⋅ 16分钟前 ⋅ 0

IDEA提示编码速度

焦点移动 将焦点冲代码编辑窗口移动到菜单栏:Alt+菜单栏带下划线字母 将焦点从工具窗口移动到代码编辑窗口 Esc或Shift+Esc 将焦点从代码编辑移动到最近使用的工具窗口 F12 模板提示 Ctrl+J...

bithup ⋅ 25分钟前 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 49分钟前 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 56分钟前 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

python3.6 安装pyhook_3

我的是在win下的,忙了半天老是安装不了, pip install 也不行。 那么可以看出自己的版本是32bit 一脸懵逼 没办法 只好下载32版本的来安装 我一直以为 是 对应32 位的 。 下面是 小例子 http...

之渊 ⋅ 今天 ⋅ 0

004、location正则表达式

1、location的作用 location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。 2、location的语法 = 开头表示精确匹配 ^~...

北岩 ⋅ 今天 ⋅ 0

CentOS7 静默安装 Oracle 12c

环境 CentOS7.5 最小安装 数据库软件 linuxx64_12201_database.zip 操作系统配置 关闭 SELinux sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config 关闭防火墙 systemctl disable ......

Colben ⋅ 今天 ⋅ 0

Yii2中findAll()的正确使用姿势/返回为空的处理办法

从一次错误的操作开始 $buildingObject = Building::findAll("status=1"); 1 这个调用看着没有任何毛病,但是在使用时返回的结果却是一个空数组。再回过头来看看数据表中: 按照套路来讲,查...

dragon_tech ⋅ 今天 ⋅ 0

如何优雅的编程——C语言界面的一点小建议

我们鼓励在编程时应有清晰的哲学思维,而不是给予硬性规则。我并不希望你们能认可所有的东西,因为它们只是观点,观点会随着时间的变化而变化。可是,如果不是直到现在把它们写在纸上,长久以...

柳猫 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部