文件上传
1.表单准备:必须有enctype="multipart/form-data"
<form action="${ctp}/upload" method="post" enctype="multipart/form-data">
用户头像:<input type="file" name="headerimg"/><br/>
用户名称:<input type="text" name="username"/><br/>
<input type="submit"/><br/>
2.导入fileupload.jar包
commons-fileupload-1.2.1.jar
commons-io-2.0.jar
3.在SpringMVC配置文件,配置文件上传解析器MultipartResolver(组件之一,接口)
我们用的是CommonMultipartResolver
文件上传解析器,要不要配bean id
ioc容器中(context),看看有没有这个bean
如果NoSuchBeanDefinitionException,multipartResolver = null
private void initMultipartResolver(ApplicationContext context) {
try {
this.multipartResolver = context.getBean(MULTIPART_RESOLVER_BEAN_NAME, MultipartResolver.class);
if (logger.isDebugEnabled()) {
logger.debug("Using MultipartResolver [" + this.multipartResolver + "]");
}
}
catch (NoSuchBeanDefinitionException ex) {
// Default is no multipart resolver.
this.multipartResolver = null;
所以,文件上传解析器,要配bean id=multipartResolver
文件上传解析器,有很多属性
maxUploadSize 上传的最大量
defaultEncoding 默认的字符编码
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="#{1024*1024*20}"></property>
<property name="defaultEncoding" value="utf-8"></property>
</bean>
一个处理器处理文件上传请求:FileUploadController
怎么处理呢?处理器方法写参数
1.用@RequestParam获取请求中的参数(作为普通项) |
---|
2.用@RequestParam获取请求中的参数,MultipartFile(作为文件项) |
@RequestMapping("/upload1")
public String upload(@RequestParam(value="username",required=false) String username,
@RequestParam("headerimg") MultipartFile file,Model model){
接下来,springmvc自动地将文件流封装给MultipartFile。
然后你可以从这个MultipartFile(文件项)中拿到上传的文件信息。
比如调用transferTo(new File)方法,可以保存上传的文件。 |
---|
@RequestMapping("/upload1")
public String upload(@RequestParam(value="username",required=false) String username,
@RequestParam("headerimg") MultipartFile file,Model model){
try {
System.out.println("文件项的name"+file.getName());
System.out.println("文件名:"+file.getOriginalFilename());
file.transferTo(new File("D:\\save\\"+file.getOriginalFilename()));
model.addAttribute("msg", "文件上传成功");
} catch (Exception e) {
model.addAttribute("msg", "文件上传失败"+e.getMessage());
}
return "forward:/upload.jsp";
}
如果文件上传成功,给页面一个提示消息。model.addAttribute()