Java文件上传-ApacheFileUpload组件的使用
使用ApacheFileUpload组件实现文件上传
1.在pom.xml中添加所需commons-fileupload依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
2.编写JSP文件,需要注意的几个点:表单项添加enctype="multipart/form-data"
,把请求方式设置为post,添加文件域<input type="file" name="imgFile">
,详情如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form action="/fileUpload" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username" id="username"><br>
文件: <input type="file" name="imgFile"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
3.控制器代码
@Controller
public class Upload1 {
@RequestMapping("fileUpload")
public String testUpload(HttpServletRequest request) throws Exception {
/**
* //G:/java/project/JavaWeb/springmvc_02_01/target/springmvc_02_01-1.0-SNAPSHOT/upload
*/
//保存的文件夹路径
String path = request.getSession().getServletContext().getRealPath("/upload");
//获取时间,把每一天上存的文件放在不同的子目录
String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//创建文件夹
File file = new File(path , date);
//判断文件夹是否存在,不存在就创建新的文件夹
if (!file.exists()){
boolean mkdirs = file.mkdirs();
}
//文件上存
//4.1 FileItem的工厂
FileItemFactory factory = new DiskFileItemFactory();
//4.2 文件上传组件提供的文件上传核心Api,对象servlet中文件上传提供支持。
ServletFileUpload upload = new ServletFileUpload(factory);
//4.3 把request对象,转换为FileItem
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (item.isFormField()){
System.out.println("用户名:" + item.getString("UTF-8"));
}else {
String fileName = item.getName();
//使用UUID+上传的文件后缀名生成唯一文件名
fileName = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."));
//上传
item.write(new File(file , fileName));
//清楚缓存
item.delete();
}
}
//跳转到成功页面
return "success";
}
}
4.html页面
5.执行结果