1)导入依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
2)编写表单
表单文件上传的三个要素:
-
form标签要添加enctype="multipart/form-data"
-
提交方法为post
-
input类型为file
@Controller
public class UploadController {
@RequestMapping("/upload")
public String fileupload(HttpServletRequest request) throws Exception {
//获取项目的upload目录路径
String path= request.getSession().getServletContext().getRealPath("/upload/");
File file=new File(path);
//判断文件夹是否存在
if (!file.exists()){
//创建文件夹
file.mkdirs();
}
//创建上传对象
ServletFileUpload upload=new ServletFileUpload(new DiskFileItemFactory());
//获得文件列表
List<FileItem> fileItems= upload.parseRequest(request);
for (FileItem item:fileItems){
//判断文件是不是普通表单项
if (item.isFormField()){
//如果是普通表单项,打印表单项名和值
System.out.println(item.getFieldName());
System.out.println(item.getString());
}else{
//如果是文件,截取后缀名
String filename= item.getName();
String suffix = filename.substring(filename.lastIndexOf("."));
//创建唯一的文件名
String uuid= UUID.randomUUID().toString().replace("-","");
filename = uuid + suffix;
//完成文件上传
item.write(new File(path,filename));
System.out.println("上传完毕");
}
}
//跳转到success页面
return "success";
}
2.1.2 SpringMVC文件上传
依赖和表单和上面一样
上传方法中使用MultipartFile参数获得上传文件
@RequestMapping("/upload")
public String fileupload(HttpServletRequest request, MultipartFile upload) throws Exception {
//获取项目目录下的upload目录路径
String path = request.getSession().getServletContext().getRealPath("/upload/");
System.out.println(path);
File file = new File(path);
if (!file.exists()) {
file.mkdirs();
}
//获取上传文件名字
String filename = upload.getOriginalFilename();
String suffix = filename.substring(filename.lastIndexOf("."));
//创建唯一的文件名
String uuid= UUID.randomUUID().toString().replace("-","");
filename = uuid + suffix;
//完成文件上传
upload.transferTo(new File(path,filename));
return "success";
}
需要在springmvc的配置中添加上传处理器
<!--上传处理器-->
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
<!--上传文件最大字节数-->
<property name="maxUploadSize" value="10485760"/>
</bean>
2.1.3 SpringMVC多文件上传
给表单添加多个文件项
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="uploads">
<input type="file" name="uploads">
<input type="file" name="uploads">
<input type="submit" value="MVC多文件上传">
</form>
添加MultipartFile数组为参数,参数名和表单name一致
@RequestMapping("/upload3")
public String fileupload3(HttpServletRequest request, MultipartFile[] uploads) throws Exception {
//获取tomcat项目目录下的upload目录路径
String path = request.getSession().getServletContext().getRealPath("/upload/");
System.out.println(path);
File file = new File(path);
if (!file.exists()) {
file.mkdirs();
}
for(MultipartFile upload : uploads) {
//获取上传文件名字
String filename = upload.getOriginalFilename();
String suffix = filename.substring(filename.lastIndexOf("."));
//创建唯一的文件名
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid + "-" + suffix;
//完成文件上传
upload.transferTo(new File(path, filename));
}
return "success";
}