MultipartResolver实现文件上传功能
springMVC默认的解析器里面是没有加入对文件上传的解析的,,使用springmvc对文件上传的解析器来处理文件上传的时需要用springmvc提供的MultipartResolver的申明,又因为CommonsMultipartResolver实现了MultipartResolver接口,所以我们可以在springmvc配置文件中这样配置:
首先引入文件上传所需要的包,commons-logging-*.jarcommons-io-*.jar commons-fileupload-*.jar
新建一个JSP页面.
<%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>文件上传 <%----%>
springmvc上传文件的形式有很多,这里我介绍两种.
第一种,看Controller
packagegd.hz.springmvc.controller;
importjava.io.File;
importjava.io.IOException;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestMethod;
importorg.springframework.web.bind.annotation.RequestParam;
importorg.springframework.web.multipart.commons.CommonsMultipartFile;
importorg.springframework.web.servlet.ModelAndView;
@Controller("userController")
@RequestMapping("user")
publicclassUserController{
//处理文件上传一
@RequestMapping(value="fileUpload",method=RequestMethod.POST)
publicModelAndViewfileUpload(
@RequestParam("fileUpload")CommonsMultipartFilefile){
//获取文件类型
System.out.println(file.getContentType());
//获取文件大小
System.out.println(file.getSize());
//获取文件名称
System.out.println(file.getOriginalFilename());
//判断文件是否存在
if(!file.isEmpty()){
Stringpath="D:/"+file.getOriginalFilename();
FilelocalFile=newFile(path);
try{
file.transferTo(localFile);
}catch(IllegalStateExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
returnnewModelAndView("dataSuccess");
}
}
类CommonsMultipartFile为我们提供了许多对文件处理的方法.例如文件大小,上传文件名称,文件类型,具体用法可以查看spring的文档.transferTo就是将文件输出到指定地方.
文件上传的第二种方法,这种方法比较常用:
packagegd.hz.springmvc.controller;
importjava.io.File;
importjava.io.IOException;
importjava.util.Iterator;
importjavax.servlet.http.HttpServletRequest;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestMethod;
importorg.springframework.web.multipart.MultipartFile;
importorg.springframework.web.multipart.MultipartHttpServletRequest;
importorg.springframework.web.multipart.commons.CommonsMultipartResolver;
@Controller("userController")
@RequestMapping("user")
publicclassUserController{
//处理文件上传二
@RequestMapping(value="fileUpload2",method=RequestMethod.POST)
publicStringfileUpload2(HttpServletRequestrequest)
throwsIllegalStateException,IOException{
//设置上下方文
CommonsMultipartResolvermultipartResolver=newCommonsMultipartResolver(
request.getSession().getServletContext());
//检查form是否有enctype="multipart/form-data"
if(multipartResolver.isMultipart(request)){
MultipartHttpServletRequestmultiRequest=(MultipartHttpServletRequest)request;
Iteratoriter=multiRequest.getFileNames();
while(iter.hasNext()){
//由CommonsMultipartFile继承而来,拥有上面的方法.
MultipartFilefile=multiRequest.getFile(iter.next());
if(file!=null){
StringfileName="demoUpload"+file.getOriginalFilename();
Stringpath="D:/"+fileName;
FilelocalFile=newFile(path);
file.transferTo(localFile);
}
}
}
return"dataSuccess";
}
}
MultipartHttpServletRequest提供了更加灵活的方法,可以获取多个文件和文件名,可以遍历获得每个文件.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。