前端页面代码编写
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="./Upload" method="post" enctype="multipart/form-data">
<input type="text" name="username">
<input type="file" name="file">
<input type="submit" value="提交">
</form>
</body>
</html>
文件上传在前端页面需要注意一下几点:
1、form表单的提交方式需要设置为post
2、form表单的enctype属性需要设置为multipart/form-data
3、input框的type应该是file
4、input框必须有name
后台servlet实现步骤及代码
// 1.创建一个DiskFileItemFactory对象/创建工厂对象
DiskFileItemFactory factory = new DiskFileItemFactory();
// 2.1设置上传文件的临界值,超过临界值则会保存到磁盘上(这里设置的临界值为5M)
factory.setSizeThreshold(1024 * 1024 * 5);
// 2.2设置文件上传的保存路径(当上传文件大小查出临界值,则会默认保存到一下目录)
factory.setRepository(new File("F:\\"));
// 3.创建文件上传类
ServletFileUpload upload = new ServletFileUpload(factory);
// 3.1设置文件上传的文件名解析格式--防止乱码
upload.setHeaderEncoding("utf-8");
// 4.设置上传的文件大小临界值,超出会报错(这里设置的是10M的大小,超出这个大小会报错)
upload.setSizeMax(1024 * 1024 * 10);
// 5.解析上传信息
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
// 判断收到的数据时一般表单域还是文件上传域
if (item.isFormField()) {
// 一般表单域
// getFieldName()获取的是表单项的name值
String fieldName = item.getFieldName();
// getString()获取的是表单项的value值
String value = item.getString();
value = new String(value.getBytes("iso8859-1"), "utf-8");
System.out.println("表单域name:" + fieldName + "值:" + value);
} else {
// 判断上传项不为空--上传文件
if (item.getName() != null && item.getName() != "") {
// 上传项
// 获取上传文件的类型--可以判断是否符合规定的上传文件的要求
String contentType = item.getContentType();
// 获取上传文件的大小--可以判断是否不超过规定的上传文件要求
long size = item.getSize();
System.out.println("文件的类型:" + contentType + "文件的大小:" + size);
// 这里预留部分用于判断上传文件的类型和大小是否满足要求
// 获取文件的名称--有些浏览器上传上来的文件名带有路径,因此需要割掉
String name = item.getName();
// 判断name是否包含路径
if (name.contains("//")) {
// 上传的文件名包含路径,进行切割
name = name.substring(name.lastIndexOf("//") + 1);
}
// 将文件保存到本地
InputStream inputStream = item.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream(new File("F://") + name);
byte[] b = new byte[1024];
int len = -1;
while((len = inputStream.read(b)) != -1) {
fileOutputStream.write(b, 0, len);
}
fileOutputStream.close();
inputStream.close();
}
}
}