Spring MVC框架的文件上传是基于commons-fileupload组件的文件上传,只不过Spring MVC框架在原有文件上传组件上做了进一步封装。
一、MultipartFile接口
在Spring MVC框架中上传文件时将文件相关信息及操作封装到MultipartFile对象中,因此开发者只需要使用MultipartFile类声明模型类的一个属性即可对被上传文件进行操作,该接口方法有如下:
* byte[] getBytes():以字节数据的形式返回文件的内容;
*String getContentType():返回文件的内容类型;
*InputStream getInputStream():返回一个InputStream,从中读取文件的内容;
*String getName():返回请求参数的名称;
*String getOriginalFilename():返回客户端提交的原始文件名称;
*Long getSize():返回文件的大小,单位为字节;
*boolean isEmpty():判断被上传文件是否为空;
*void transferTo(File destination):将上传文件保存到目标目录下
二、单文件上传
1、创建单文件上传实体
public class FileDomain{
private String description;
private MultipartFile myFile;
//省略setter和getter方法
}
2、创建单文件上传控制类、添加文件上传处理方法
@Controller
public class FileUploadController {
//创建日志对象
private static final Log logger = LogFactory.getLog(FileUploadController.class);
/**
* 单文件上传
*/
@RequestMapping("/onefile")
public void oneFileUpload(@ModelAttribute FileDomain fileDomain,HttpServletRequest request){
//获取上传路径
String realPath = request.getServletContext().getRealPath("uploadfiles");
MultiPartFile file = fileDomain.getMyFile();
String filename = file.getOriginalFilename();
File targetFile = new File(realPath,filename);
if(!targetFile.exists()){
targetFile.mkdirs();
}
//上传
try{
//上传文件关键代码
file.transferTo(targetFile);
logger.info("成功");
}catch(Exception e){
logger.info(e.getMessage());
}
}
}
三、多文件上传
1、创建多文件上传实体类
public class MultiFileDomain{
private List<String> description;
private List<MultipartFile> myFile;
//省略setter和getter方法
}
2、创建多文件上传控制类,添加多文件上传处理方法
@Controller
public class MultiFileUploadController {
//创建日志对象
private static final Log logger = LogFactory.getLog(FileUploadController.class);
/**
* 多文件上传
*/
@RequestMapping("/multifile")
public void multiFileUpload(@ModelAttribute MultiFileDomain multiFileDomain,HttpServletRequest request){
//获取上传路径
String realPath = request.getServletContext().getRealPath("uploadfiles");
List<MultipartFile> files = multiFileDomain.getMyFile();
File targetDir = new File(realPath);
if(!targetDir .exists()){
targetFile.mkdirs();
}
for(int i=0; i<files.size(); i++){
MultipartFile file = files.get(i);
String filename = file.getOriginalFilename();
File targetFile = new File(realPath,filename);
//上传
try{
//上传文件关键代码
file.transferTo(targetFile);
}catch(Exception e){
logger.info(e.getMessage());
}
}
logger.info("成功");
}
}