首先,需要在pom文件中添加相关依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
编写前端页面
form
表单必须添加enctype="multipart/form-data
属性,input
设置为file
类型,这里的name
属性不能省略,可能导致文件上传失败。
<form action="file/fileupload" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="upload"/>
<br/>
<input type="submit" value="上传"/>
</form>
编写文件上传控制器
List<FileItem> items
获取的是所有表单元素,通过isFormField
判断当前元素是普通表单项还是文件上传项。通过在上传文件前面添加uuid,可以实现将相同文件上传多次,并且实际存储的文件名不同。真实文件名可通过“-”进行简单拆分获取。
@Controller
@RequestMapping("/file")
public class FileUploadController {
@RequestMapping("/fileupload")
public String doFileUpload(HttpServletRequest request) throws Exception {
//文件上传路径
String path = request.getSession().getServletContext().getRealPath("/uploads");
//打印文件上传地址
//System.out.println(path);
File file = new File(path);
if(!file.exists()){
file.mkdirs();
}
//解析request对象,获取上传文件项
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//解析request
List<FileItem> items = upload.parseRequest(request);
for(FileItem item:items){
//判断是否为文件上传项
if(!item.isFormField()){
String fileName = item.getName();
String uuid = UUID.randomUUID().toString();
fileName = uuid + "-" + fileName;
//上传文件,指定上传路径和文件名
item.write(new File(path,fileName));
//删除临时文件
item.delete();
}
}
return "uploadSuccess";
}
}