springmvc 文件上传案例

来源:互联网 发布:美国退出亚太 知乎 编辑:程序博客网 时间:2024/06/05 17:45

      第一步:在springmvc.xml中配置文件上传解析器--- Multipart解析器

<!-- Multipart解析器 -->
<bean id="multipartResolver"  
  

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>

//特别说明:bean的id固定写成multipartResolver,因为在springmvc的核心类DispatcherServlet中已经规定了,

使用Multipart解析器,bean的id就必须这么写,里面还规定了其他的一些成员变量的属性值要求.


  第二步:导入jar包:

CommonsMultipartResolver解析器依赖commons-fileupload和commons-io,加入如下jar包:

1,commons-io-2.4.jar 

2,commons-fileupload-1.2.2.jar


 第三步:在controller中实现相关代码

//特别说明:

controller方法形参上添加MultipartFile类型的参数,参数名称和上传页面上file的名称一致,才可以绑定成功。

@RequestMapping("/submitItem")
public String submitItem(Items items
,@RequestParam("file")MultipartFilefile) throws Exception, IOException{
//使用SpringMVC注解RequestParam来指定表单中的file参数

if(file !=null && file.getOriginalFilename() !=null &&!file.getOriginalFilename().equals("")){
//获取原始文件名
String originalFilename = picture.getOriginalFilename();
//将原文件名进行截取,并赋予一个唯一的文件名
String fileName = UUID.randomUUID()+originalFilename.substring(originalFilename.lastIndexOf("."));
//构造一个新文件
File
newFile = new File("F:\\javaEE\\upload\\temp\\"+fileName);
//将
文件写入磁盘中
file.transferTo(
newFile);
}
//调用service层
itemsService.updateItems(items);
//返回一个列表页面
return "forward:queryItems.action";


}


  第四步:jsp页面

在form中指定multipart编码格式:enctype="multipart/form-data"

如果form表单上添加enctype="multipart/form-data",而springmvc.xml中没有配置multipart解析器,

此时其它类型参数(pojo,基本类型)都不能绑定成功。

所以,主要只要form中有enctype="multipart/form-data"配置,

必须要springmvc.xml中配置multipart解析器

补充说明:有些哥们可能会疑惑,为什么方法的形参能是MultipartFile,(Items 是pojo类型),这涉及到参数绑定知识,我也没怎么搞明白.

还有就是有哥们说一定要使用SpringMVC注解RequestParam来指定表单中的file参数,

但是我试过,不指定也是可以的,希望楼下哥们能给我解答一下,感谢!


0 0