java实现文件上传功能(上)

举报
泽宇-Li 发表于 2020/12/14 09:47:16 2020/12/14
【摘要】 本文实例为大家分享了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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。