首先,需要在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";
}
}