由于客户端上传文件的大小是不确定的,所以HTP协议规定,文件上传的数据要存放于请求
正文中,而不能出现在URL的地址栏中,因为地址栏中可以存放的数据量太小,也就是说,文件上传的表单,必须提交POST请求,而不能提交GET请求。
当表单需要上传文件时,需指定表单enctpe的值为multipart/form-data
加载依赖
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
HTML
<body>
<form action="upLoadServlet" method="post" enctype="multipart/form-data">
用户名 :<input type="text" name="username"><br/>
年龄:<input type="text" name="age"><br/>
简历:<input type="file" name="resume"><br/>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
Servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取FileItem的集合
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置内存中最多可以存放的上传文件的大小,若超出则把文件写到一个临时文件夹中
factory.setSizeThreshold(1024 * 1024 * 5);
// 设置临时文件夹的位置
File file = new File("D:/epoint");
factory.setRepository(file);
// 创建一个ServletFileUpload上传工具
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传文件的总大小
upload.setSizeMax(1024 * 1024 * 5);
// 解析request对象,并把表单中的为依归输入项包装成一个fileItem对象
try {
List<FileItem> items = upload.parseRequest(request);
for (FileItem fileItme : items) {
if (fileItme.isFormField()) {
String fieldName = fileItme.getFieldName();
String str = fileItme.getString();
System.out.println(fieldName + " : " + str);
} else {
String fileName = fileItme.getName();
String conteType = fileItme.getContentType();
long size = fileItme.getSize();
System.out.println(fileName);
System.out.println(conteType);
System.out.println(size);
InputStream in = fileItme.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
fileName = "D:/epoint/" + fileName;
OutputStream out = new FileOutputStream(fileName);
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.close();
in.close();
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}