SpringMVC⽤MultipartFile上传⽂件及⽂件名中⽂乱码
前⾔
近⽇,项⽬中有个需求-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.multipartmons.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.
2. 书写后台controller类
需要注意的是window下路径的斜杠需要转义
@RequestMapping("fileUpload")
public String fileUpload(@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
String filePath = Session().getServletContext().getRealPath("/") + "\\fileUpload\\" +  OriginalFilename();//感觉是不是对⽂件名裁剪空//转存⽂件
try {
} catch (IOException e) {
e.printStackTrace();
}
}
// 重定向
return"redirect:/jsp/succ.jsp";
}
1.
2. 上传的⽂件中⽂名乱码
当然有可能你的⽂件上传后,⽂件名中⽂乱码。
出现这种情况,⾸先需要检查
xml
<bean id="multipartResolver" class="org.springframework.web.multipartmons.CommonsMultipartResolver"
p:defaultEncoding="UTF-8"
p:maxUploadSize="5400000"
springmvc常用标签p:uploadTempDir="fileUpload/temp" ></bean>
⾥⾯是不是配置了utf-8,因为默认是iso编码(这种情况CharacterEncoding获得值是null,其实就是ISO编码)。
其次需要就检查⽂件上传的那个jsp页⾯编码⾥⾯的编码。包括pageCode,charset和head标签中meta
编码最好都是utf-8编码。其他的想tomcat的 l和项⽬的l都是可以直接使⽤默认(有⽹友指出这两个地⽅需要修改,亲测这两个我都没改,只是
保证了CommonsMultipartResolver和jsp页⾯编码就ok了)。
参考
最后⼀篇参考资料提到的jar包问题和编码要保证四个地⽅的配置正确都是有问题的,但是有点参考价值

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。