首先,需要在pom文件中添加相关依赖
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency><!-- /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);//解析requestList<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";}}