java实现文件上传功能(上)
【摘要】 本文实例为大家分享了java实现文件上传的具体代码,供大家参考,具体内容如下一、文件上传准备工作对于文件上传,浏览器在上传的过程中将文件以流的形式提交到服务器。可以选择apache的commons-fileupload包作为文件上传组件,commons-fileupload包依赖于commons-io包。可以在Maven导入该commons-fileupload包,Maven会帮我们导入依赖...
本文实例为大家分享了java实现文件上传的具体代码,供大家参考,具体内容如下
一、文件上传准备工作
对于文件上传,浏览器在上传的过程中将文件以流的形式提交到服务器。
可以选择apache的commons-fileupload包作为文件上传组件,commons-fileupload包依赖于commons-io包。
可以在Maven导入该commons-fileupload包,Maven会帮我们导入依赖的jar包commons-io。
1
2
3
4
5
|
< dependency >
< groupId >commons-fileupload</ groupId >
< artifactId >commons-fileupload</ artifactId >
< version >1.3.3</ version >
</ dependency >
|
二、文件上传的主要步骤
-
创建diskFileItemFactory对象,处理文件上传路径或者大小限制
-
通过diskFileItemFactory对象作为ServletFileUpload类的参数,创建ServletFileUpload对象
-
处理上传的文件
三、代码实现
在文件上传时,表单一定要加enctype=“multipart/form-data” 。只有使用enctype=“multipart/form-data”,表单才会把文件的内容编码到HTML请求中。
默认enctype=“application/x-www-form-urlencoded”,表单的内容会按URL规则编码。
而enctype="multipart/form-data"不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
method也一定要使用post请求。
1
2
3
4
5
6
|
< form action = "/file.do" enctype = "multipart/form-data" method = "post" >
< p >上传用户:< input type = "text" name = "username" ></ p >
< p >< input type = "file" name = "file1" ></ p >
< p >< input type = "file" name = "file2" ></ p >
< p >< input type = "submit" >|< input type = "reset" ></ p >
</ form >
|
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
|
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//判断上传的是普通表单还是带文件的表单
if (!ServletFileUpload.isMultipartContent(req)) {
return ;
}
//创建上传文件保存的地址,一般创建在WEB-INF目录下,用户无法直接访问该目录下的文件
String uploadPath = this .getServletContext().getRealPath( "/WEB-INF/upload" );
File uploadFile = new File(uploadPath);
//如果文件夹不存在,则创建一个
if (!uploadFile.exists()) {
uploadFile.mkdir();
}
//创建上传大文件的临时地址,一般几天后自动删除,用户可以手动删除或者转为永久文件
// 一般创建在WEB-INF目录下,用户无法直接访问该目录下的文件
String tempPath = this .getServletContext().getRealPath( "/WEB-INF/temp" );
File tempFile = new File(tempPath);
//如果文件夹不存在,则创建一个
if (!tempFile.exists()) {
tempFile.mkdir();
}
//1.创建diskFileItemFactory对象,处理文件上传路径或者大小限制
DiskFileItemFactory factory = getDiskFileItemFactory(tempFile);
//2.获取ServletFileUpload
ServletFileUpload upload = getServletFileUpload(factory);
//3.处理上传的文件
try {
String msg = uploadParseRequest(upload, req, uploadPath);
//转发
req.setAttribute( "msg" ,msg);
req.getRequestDispatcher( "info.jsp" ).forward(req, resp);
} catch (FileUploadException e) {
e.printStackTrace();
}
}
public DiskFileItemFactory getDiskFileItemFactory(File file) {
DiskFileItemFactory factory = new DiskFileItemFactory();
//创建一个缓存区,当上传文件大于设置的缓存区时,将该文件放到临时目录
factory.setSizeThreshold( 1024 * 1024 ); //缓存区大小为1M
factory.setRepository(file); //临时目录
return factory;
}
|
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)