步骤
- 添加依赖
- upload.jsp页面
- UploadController.java 控制器
- 测试
实现
-
添加依赖
<!--添加Apache文件上传支持--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>
-
upload.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>upload</title>
</head>
<body>
<form action="/fileUpload" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"> <br>
文件: <input type="file" name="imgFile"> <br>
<input type="submit" value="上传">
</form>
</body>
</html>
-
UploadController.java 控制器
package com.lilei.upload; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.UUID; /** * 1.Apache提供的文件上传支持 */ @Controller public class UploadController { @RequestMapping("/fileUpload") public String upload(HttpServletRequest request) throws Exception { //1. 获取上传的目录路径 // H:/classes/baseproject/springmvc02/target/springmvc02-1.0-SNAPSHOT/upload String path = request.getSession().getServletContext().getRealPath("/upload"); //2. 以天为单位,一天创建一个文件夹,保存当天上传的文件 String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //3. 创建目录 File file = new File(path,date); if (!file.exists()){ // 创建目录或子目录 file.mkdirs(); } //4. 文件上传 //4.1 FileItem的工厂 FileItemFactory factory = new DiskFileItemFactory(); //4.2 文件上传组件提供的文件上传核心Api,对象servlet中文件上传提供支持。 ServletFileUpload upload = new ServletFileUpload(factory); //4.3 把request对象,转换为FileItem // <input type="text" name="username"> 用FileItem封装 // <input type="file" name="imgFile"> 用FileItem封装 List<FileItem> items = upload.parseRequest(request); //4.4 遍历 for (FileItem item : items){ if (item.isFormField()){ // 说明是普通文本框:<input type="text" name="username"> System.out.println("用户名:" + item.getString("UTF-8")); } else { // 说明是文件域:<input type="file" name="imgFile"> ,就要文件上传 //a. 获取文件名 String fileName = item.getName(); //b. 处理文件名唯一. 文件名=uuid + 文件后缀 fileName = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf(".")); //c. 上传 【最关键】 item.write(new File(file,fileName)); //d. 删除临时文件 item.delete(); } } return "success"; } public static void main(String[] args) { String fileName = "a.jpg"; String result = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf(".")); System.out.println(result); } }
之后就可以实现上传了