首页 技术 正文
技术 2022年11月23日
0 收藏 834 点赞 2,538 浏览 2370 个字

转:

Servlet学习:(三)Servlet3.0 上传文件

2018年08月03日 11:57:58 iDark_CSDN 阅读数:362  

一、注意事项

客户端(浏览器)

  • 表单的提交方法必须是post
  • 必须有一个文件上传组件 <input type=”file” name=”file”/>
  • 必须设置表单的enctype=”multipart/form-data

服务器

  • 在Servelt上添加注解  @MultipartConfig

二、参考

HttpServletRequest 对文件上传的支持

此前,对于处理上传文件的操作一直是让开发者头疼的问题,因为 Servlet 本身没有对此提供直接的支持,需要使用第三方框架来实现,而且使用起来也不够简单。如今这都成为了历史,Servlet 3.0 已经提供了这个功能,而且使用也非常简单。为此,HttpServletRequest 提供了两个方法用于从请求中解析出上传的文件:

  • Part getPart(String name)
  • Collection<Part> getParts()

前者用于获取请求中给定 name 的文件,后者用于获取所有的文件。每一个文件用一个 javax.servlet.http.Part 对象来表示。该接口提供了处理文件的简易方法,比如 write()、delete() 等。至此,结合 HttpServletRequest 和 Part 来保存上传的文件变得非常简单,如下所示:

1

2

3

Part photo = request.getPart("photo");

photo.write("/tmp/photo.jpg");

// 可以将两行代码简化为 request.getPart("photo").write("/tmp/photo.jpg") 一行。

另外,开发者可以配合前面提到的 @MultipartConfig 注解来对上传操作进行一些自定义的配置,比如限制上传文件的大小,以及保存文件的路径等。其用法非常简单,故不在此赘述了。

需要注意的是,如果请求的 MIME 类型不是 multipart/form-data,则不能使用上面的两个方法,否则将抛异常。

URL:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html

三、Html

  1. <%@ page contentType=”text/html;charset=UTF-8″ language=”java” %>
  2. <html>
  3. <head>
  4. <title>Upload File</title>
  5. </head>
  6. <body>
  7. <h1>Upload File</h1>
  8. <form action=”/uploadServlet” method=”post” enctype=”multipart/form-data”>
  9. File : <input type=”file” name=”file”/>
  10. <input type=”submit” name=”Submit”/>
  11. </form>
  12. </body>
  13. </html>

四、Servlet

  1. package com.idark.servlet;
  2.  
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.MultipartConfig;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import javax.servlet.http.Part;
  10. import java.io.File;
  11. import java.io.IOException;
  12. import java.io.PrintWriter;
  13.  
  14. /**
  15. * 上传文件
  16. */
  17. @WebServlet(name = “UploadServlet” , urlPatterns = “/uploadServlet”)
  18. @MultipartConfig
  19. public class UploadServlet extends HttpServlet {
  20. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  21.  
  22. //创建目录
  23. File path = new File(“d:\\tmp”);
  24. if (!path.exists()){
  25. path.mkdir();
  26. }
  27. //获取文件
  28. Part img = request.getPart(“file”);
  29. //文件全路径
  30. String filePath = path.getPath() + File.separator + img.getSubmittedFileName();
  31. //写入文件
  32. img.write(filePath);
  33. //输出信息
  34. System.out.println(“File Upload : ” + filePath);
  35. PrintWriter out = response.getWriter();
  36. out.println(“File Upload : ” + filePath);
  37.  
  38. }
  39.  
  40. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  41. System.out.println(“not support upload file by get”);
  42. }
  43. }

五、验证结果

Servlet学习:(三)Servlet3.0 上传文件

Servlet学习:(三)Servlet3.0 上传文件

Servlet学习:(三)Servlet3.0 上传文件

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,989
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,504
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,348
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,131
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,765
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,842