【代码】Servlet实现文件上传

前言

Javaweb实现文件上传

准备工作

  • 导入jar包

commons-io-2.4.jarcommons-fileupload-1.2.2.jar放到项目的/WebContent/WEB-INF/lib目录下

  • 在项目的/WebContent目录下新建用于存放上传的文件的目录file

前端页面代码

  • /WebContent目录下新建upload.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1 align="center">文件上传</h1><br>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="myfile"><br>
<input type="submit" value="上传">
</form>
</body>
</html>

Servlet代码

  • 在包下新建UploadServlet.java,访问路径修改为/upload
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package io.github.feiju12138;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class Upload extends HttpServlet {
private static final long serialVersionUID = 1L;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// 声明输入缓冲流
InputStream is = null;
// 声明文件输出流
FileOutputStream fos = null;
// 创建上传文件对象
ServletFileUpload upload = new ServletFileUpload();

try {

// 把上传的文件转换为迭代器
FileItemIterator iterator = upload.getItemIterator(req);

// 遍历文件流中的字节
while(iterator.hasNext()) {

// 取出一个文件
FileItemStream fis = iterator.next();

// 开启输入缓冲流
is = fis.openStream();

// 获取文件存放路径
String path = this.getServletContext().getRealPath("file");
path += "/" + fis.getName();

// 创建文件输出流
fos = new FileOutputStream(path);

// 将文件输出到指定目录
byte buf[] = new byte[1024];
int len = 0;
while((len = is.read(buf)) > 0) {
fos.write(buf, 0, len);
}

}
} catch (FileUploadException e) {
e.printStackTrace();
} finally {

// 关闭文件输出流
if(fos != null) {
fos.close();
}

// 关闭文件缓冲流
if(is != null) {
is.close();
}

}

}

}

完成