SpringMVC用MultipartFile上传文件及文件名中文乱码

原创 2015年11月20日 16:55:00

前言

近日,项目中有个需求-android端上传一个商品多张图片,需要java后台。以前后台使用了struts,现在是springmvc。想着很多东西是不是能优化一下,正好重新写一下。

android端有时间再记录一下
后台环境是win10+jdk1.8 + tomcat8.0.25 + idea14.0.1
软件:springmvc+ hibernate+spring +mysql (maven构建)

过程

  1. pring mvc的文件上传是通过commons-fileupload来完成的,首先我们需要添加maven依赖:
<!--fileupload-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.2</version>
        </dependency>

这里又得记录一个小坑,今天在maven仓库手动下载了这两个包,导入仓库,但是在idea中update仓库之后,启动程序还是报错找不到FactoryItemXXX类,这个是commons-fileupload的类。但是明明就已经有了。实在不行了,就将仓库中的删了。然后让maven自己去下载,但是修改完pom文件却迟迟不见下载,后来发现,这个文件由于modules的module配置值出错,将此注释,即刻下载。
2. mvc的配置文件中添加MultipartResolver的申明
spring mvc默认的解析器没有加入对文件上传的解析,我们要在mvc的配置文件中添加MultipartResolver的申明,因为CommonsMultipartResolver实现了MultipartResolver接口,所以配置如下:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
            p:defaultEncoding="UTF-8"
            p:maxUploadSize="5400000"
            p:uploadTempDir="fileUpload/temp"  ></bean>
  1. form表单
<form action="user/fileUpload" method="post" enctype="multipart/form-data">  
    <input type="file" name="files" />  
    <input type="submit" value="上传" />  
</form>


  1. 书写后台controller类

需要注意的是window下路径的斜杠需要转义

@RequestMapping("fileUpload")
    public String fileUpload(@RequestParam("file") MultipartFile file) {
        if (!file.isEmpty()) {
            String filePath = request.getSession().getServletContext().getRealPath("/") + "\\fileUpload\\" +  file.getOriginalFilename();//感觉是不是对文件名裁剪空格后保存比较好?
            //转存文件
            try {
                file.transferTo(new File(filePath));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        // 重定向
        return "redirect:/jsp/succ.jsp";
    }

亲刷新试试


  1. 上传的文件中文名乱码

当然有可能你的文件上传后,文件名中文乱码
出现这种情况,首先需要检查
xml
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="UTF-8"
p:maxUploadSize="5400000"
p:uploadTempDir="fileUpload/temp" ></bean>

里面是不是配置了utf-8,因为默认是iso编码(这种情况request.getCharacterEncoding获得值是null,其实就是ISO编码)。
其次需要就检查文件上传的那个jsp页面编码里面的编码。包括pageCode,charset和head标签中meta编码最好都是utf-8编码。其他的想tomcat的 server.xml和项目的web.xml都是可以直接使用默认(有网友指出这两个地方需要修改,亲测这两个我都没改,只是保证了CommonsMultipartResolver和jsp页面编码就ok了)。

参考

Spring mvc 文件上传
spring mvc 文件上传下载
SpringMVC 文件上传配置,多文件上传,使用的MultipartFile
android 上传图片、服务器接收
[文件名上传乱码]http://www.lai18.com/content/981198.html

最后一篇参考资料提到的jar包问题和编码要保证四个地方的配置正确都是有问题的,但是有点参考价值

版权声明:本文为博主原创文章,未经博主允许不得转载。

javaEE项目Multipartfile实现文件上传下载并解决上传与下载文件中文乱码的问题

里面包含了文件上传下载并解决上传与下载文件中文乱码的问题,运用正则表达式判断字符串中是否包含中文和得到一个文件夹下的所有文件的方法,几乎集合了上传下载所需要的所有东西.下面代码加红的部分就是这几个重要...
  • CSDN___LYY
  • CSDN___LYY
  • 2017年08月06日 21:46
  • 2087

jquery file upload 后台收到的文件名中文乱码, filename中文乱码

解决一个javascript插件中文编码问题的过程
  • zhouyingge1104
  • zhouyingge1104
  • 2014年07月31日 20:26
  • 14848

Struts2文件上传以及文件名中文乱码解决

这次练习的是一个很简单的内容:将文件上传到服务器。主要功能就是把文件上传到服务器中指定的路径。 开发环境和工具 配置Java开发环境的Windows操作系统,MyEclipse 2014/2...
  • qq_33171970
  • qq_33171970
  • 2016年05月15日 13:52
  • 2650

android通过Http请求上传文件时文件名中文乱码

项目中遇到了文件名含有中文时,手机端上传至服务器,接收到的文件名中文全是乱码,查找了许多方法,最终还是解决了,利用URLEncoder编码、解码的办法。 相关代码的片段: String end = "...
  • yx0628
  • yx0628
  • 2013年09月12日 14:35
  • 4413

java文件上传与下载(springmvc框架下)及enctype=”multipart/form-date导致的中文乱码的解决

1.需要的jar包,路径: /WebContent/WEB-INF/lib   2.在springMVC的配置文件中进行文件上传下载的配置。/WebContent/WEB-INF/springmvc-...
  • guozili1
  • guozili1
  • 2017年03月01日 14:39
  • 363

ASP.NET jquery.uploadify文件上传控件测试项目(已解决中文乱码)

  • 2011年03月09日 17:18
  • 669KB
  • 下载

中文名文件上传到linux服务器上以后文件名会乱码(openoffice)

1、中文名文件上传后保存在linux服务器上文件名会乱码,但是我们通过SSH直接对服务器上的一个文件进行重命名是可以使用中文的,而且显示出来是正确的,这说明服务器是可以支持中文的。 2、而为什么上传...
  • u010363836
  • u010363836
  • 2015年10月11日 10:59
  • 5928

中文名文件上传到linux服务器文件名乱码问题(转)

1、中文名文件上传后保存在Linux服务器上文件名会乱码,但是我们通过SSH直接对服务器上的一个文件进行重命名是可以使用中文的,而且显示出来是正确的,这说明服务器是可以支持中文的。 2、而为什么...
  • Axela30W
  • Axela30W
  • 2017年06月07日 11:36
  • 460

用FlashFXP上传文件到SSH服务器,附FlashFXP显示中文乱码的解决方法

用SSH Secure Shell能上传文件,又能输入命令,而且上传文件的时候不容易无故断开连接。但是它缺少续传的功能,不太适合上传比较大的文件;而且它在与linux系统SSH登陆时不方便支持中文,所...
  • zdwzzu2006
  • zdwzzu2006
  • 2012年09月06日 23:58
  • 14857

java中ftp文件上传和中文乱码解决(一)

前几天 有个需求就是上传文件的时候,本地存一份,其他服务器也保存一份,于是就研究了一下,功能只实现了上传文件不能上传文件夹这里主要用到了 ftp服务器软件 网上有很多我用的是 serv-u,操作比较简...
  • cr135810
  • cr135810
  • 2014年03月19日 15:37
  • 4173
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SpringMVC用MultipartFile上传文件及文件名中文乱码
举报原因:
原因补充:

(最多只允许输入30个字)