文件上传
MultipartResolver用于处理上传请求,将上传请求包装成可以直接获取文件的数据,从而方便操作,
MultipartResolve拥有两个实现类
- StandardServletMultipartResolver:使用servlet3.0标准的上传方式,不用依赖第三方包
- CommonsMultipartResolver:使用Apache的commons-fileupload完成具体上传操作,需要依赖第三包才能实现
- 单文件上传
使用CommonsMultipartResolver实现单文件的上传功能
springmvc.xml配置ConmmonsMultipartResolver类
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResovler">
<!--设置上传文件的最大尺寸为1MB-->
<property name="maxUploadSize" value="1048576"/>
<!--字符编码-->
<property name="defaultEncoding" value="UTF-8"/>
</bean>
MultipartResolver接口的实现类CommonsMultipartResolver是引用multipartResolver字符串获取该实现类对象并完成文件解析的,所以在配置CommonsMultipartResolver时必须指定该Bean的id为multipartResolver
index.jsp代码
<form action="../fileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
success.jsp界面
文件上传成功<br>
上传文件路径:${requestScope.fileUrl}
controller层代码
@Controller
public class FileUploadController{
@RequestMapping(value="/fileupload")
public String fileUpload(@RequestParam(value="file",required="false") MultipartFile file,HttpServletRequest request,ModelMap model){
//服务器端upload文件夹物理路径
String path=request.getSession().getServletContext().getRealPath("upload");
//获取文件名
String fileName=file.getOriginalFilename();
//实例化一个File对象,表示目标文件(含物理路径)
File targetFile = new File(path,fileName);
if(!targetFile.exists()){
targetFile.mkdirs();
}
try{
//将上传文件保存到服务器上指定位置
file.transferto(targetFile)
}catch(Exception e){
e.printStackTrace();
}
model.put("fileUrl",request.getContextPath()+"/upload/"+fileName);
return "success";
}
}
在FileUpload方法参数中,@RequestParam注解用于在控制FileUploadController中绑定请求参数到方法参数。请求参数为file,将index.jsp页面文件上传表单中名为file的value指赋给MultiparFile类型的file属性;required=false表示使用@RequestParam注解可以不传file参数,如果required=true时则必须传递该参数,required默认参数是true
SpringMVC会将上传的文件绑定到MultipartFile对象中,MultipartFile提供了获取上传文件内容,文件名等方法,通过transferTo方法可将文件存储到硬件中
- 多文件上传
将方法参数中的参数MultipartFile设置为数组形式
@RequestMapping(value="/fileUpload")
public String fileUpload(@RequestParam("file")MultipartFile[] files,HttpServletRequest request,ModelMap model){
//利用数组的方式来处理多个文件
}
用HTML5的方式实现多文件上传
<%@ page language="java" contentType="text/html;charset=UTF-8";pageEncoding="UTF-8">
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type&#