SpringMVC为文件上传提供了直接支持,通过MultipartResolver实现。默认没有装配MultipartResolver,需要先在上下文中配置MultipartResolver。
1、需要的jar包
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
2、在上下文中进行配置:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--必须和jsp页面中的pageEncoding保持一致-->
<property name="defaultEncoding" value="UTF-8"/>
<!--上传文件大小限制,(5M)-->
<property name="maxUploadSize" value="5242880"/>
<!--上传文件过程中的临时目录,文件上传完成后,会自动清除-->
<property name="uploadTempDir" value="file:F:\work\"/>
</bean>
3、在控制类Controller中:
@RequestMapping(value = "/hand33")
//上传的文件自动绑定到MultipartFile中
public String hand33(@Valid @ModelAttribute("user") User user, BindingResult bindingResult, @RequestParam("file")MultipartFile file){
if(bindingResult.hasErrors()){
return "user/register";
}else{
try{
//MultipartFile对象提供了获取文件内容、文件名等方法
if(!file.isEmpty()){
//将文件存储到其他路径下
file.transferTo(new File("F:\\learnTest\\"+file.getOriginalFilename()));
}
}catch (Exception e){
e.printStackTrace();
}
return "user/createSuccess";
}
}
4、jsp中
<body>
<!--设置form的enctype属性为multipart/form-data-->
<form:form modelAttribute="user" action="/spitter/test/hand33" enctype="multipart/form-data">
<form:errors path="*" cssClass="errorClass"/>
<table>
<tr>
<td>用户名:</td>
<td>
<form:input path="userName"/>
<form:errors path="userName" cssClass="errorClass"/>
</td>
</tr>
<tr>
<td>密码:</td>
<td>
<form:password path="password"/>
<form:errors path="password" cssClass="errorClass"/>
</td>
</tr>
<tr>
<!--上传文件-->
<td>上传文件:</td>
<td><input type="file" name="file"/></td>
</tr>
<tr>
<td>
<input type="submit" name="提交">
</td>
</tr>
</table>
</form:form>
</body>