前言
近日,项目中有个需求-android端上传一个商品多张图片,需要java后台。以前后台使用了struts,现在是springmvc。想着很多东西是不是能优化一下,正好重新写一下。
android端有时间再记录一下
后台环境是win10+jdk1.8 + tomcat8.0.25 + idea14.0.1
软件:springmvc+ hibernate+spring +mysql (maven构建)
过程
- 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>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
这里又得记录一个小坑,今天在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
- 2
- 3
- 4
- form表单
<form action="user/fileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="files" />
<input type="submit" value="上传" />
</form>
- 1
- 2
- 3
- 4
- 书写后台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
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 上传的文件中文名乱码
当然有可能你的文件上传后,文件名中文乱码。
出现这种情况,首先需要检查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
转载于:https://blog.csdn.net/xinjianwuhen1991/article/details/49949089/