Servlet3.0文件上传
1.Sevlet3.0提供了一个新API来处理上传数据:
-
Annotation MultipartConfig: A servlet can be annotated with this annotation in order to handlemultipart/form-data requests which contain file upload data.
通过这个注解标记一个Servlet 可以处理multipart/form-data请求包含的文件上传操作。
annotation has the following options:
-
-
fileSizeThreshold: file’s size that is greater than this threshold will be directly written to disk, instead of saving in memory.
如果上传的文件内容长度大于此值,将会写入磁盘而不保存在内存中。 -
location: directory where file will be stored via Part.write() method.
文件保存的本地路径 -
maxFileSize: maximum size for a single upload file.
单次上传文件长度最大值,此值为字节 -
maxRequestSize:maximum size for a request.
单次上传文件长度最大值,此值为字节所有size单位为字节,-1L表示不限制。1024*1024*10 = 10 MB
-
fileSizeThreshold: file’s size that is greater than this threshold will be directly written to disk, instead of saving in memory.
-
-
Interface Part: represents a part in a multipart/form-data request. This interface defines some methods for working with upload data (to name a few):
-
-
getInputStream(): returns an InputStream object which can be used to read content of the part.
获取上传文件的文件流 -
getSize(): returns the size of upload data, in bytes.
文件大小 -
write(String filename): this is the convenience method to save upload data to file on disk. The file is created relative to the location specified in the MultipartConfig annotation.
-
getInputStream(): returns an InputStream object which can be used to read content of the part.
-
-
New methods introduced in HttpServletRequest interface:
-
getParts(): returns a collection of Part objects
获取多个上传文件对象 -
getPart(String name): retrieves an individual Part object with a given name.
获取指定名name的上传文件对象。<input type="file" name="abc">
-
getParts(): returns a collection of Part objects
示例代码---服务端:
@WebServlet(urlPatterns = "/upload.html") @MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, maxFileSize = 1024 * 1024 * 10, maxRequestSize = 1024 * 1024 * 50) public class UploadFileServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("UploadFileServlet doPost invoked!"); for (Part part : req.getParts()) { String fileName = extractFileName(part); part.write("D://xxx_"+fileName); /* * System.out.println("fileName=" + fileName); InputStream is = * null; OutputStream os = null; try { is = part.getInputStream(); * os = new FileOutputStream(new File("D://xxx_" + fileName)); * byte[] buf = new byte[1024]; int len = 0; while ((len = * is.read(buf)) != -1) { os.write(buf, 0, len); } } catch * (Exception e) { } finally { if (is != null) { os.close(); * is.close(); } } */ } resp.setCharacterEncoding("utf-8"); resp.getWriter().println("上传文件成功!"); resp.getWriter().close(); } /** * Extracts file name from HTTP header content-disposition */ private String extractFileName(Part part) { String contentDisp = part.getHeader("content-disposition"); String[] items = contentDisp.split(";"); for (String s : items) { if (s.trim().startsWith("filename")) { return s.substring(s.indexOf("=") + 2, s.length() - 1); } } return ""; } }
客户端:此处使用Jsoup代码的方式上传文件,而不是通过浏览器。不熟悉Jsoup的可以参数我另一篇博文“HttpClient/Jsoup 请求”
public static void main(String[] args) { InputStream is = null; try { String url = "http://localhost:8080/part1/upload.html"; is = new FileInputStream(new File("D://abc.txt")); Response response = Jsoup.connect(url).data("gdr", "abcc.txt", is).method(Method.POST).execute(); System.out.println(response.body()); } catch (Exception e) { e.printStackTrace(); } finally { if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } }
输出:
上传文件成功!
注:该代码在Eclipse-Jetty插件中运行,一直没有将文件写入D://下。但在Tomcat中运行,一切正常。
造成这种现象很容易理解,Servlet为接口规范,其实现为各Web容器。
因此建议在保存文件时为了保证在各种Web容器中运行都有一至结果,建议通过Part接口获取文件输入流,自己实现文件保存功能。如示例中的注释。
相关推荐
Servlet 3.0是Java EE 6规范的一...如果你想要深入了解Servlet 3.0的文件上传功能,可以通过阅读指定的博文链接(已提供但此处未显示)或者查阅相关的Java EE 6文档,进一步学习如何在实际项目中有效利用这些新特性。
本工程用于借助Servlet3.0实现文件上传 本工程编码方式:UTF-8 注意: 1、在上传文件前请在计算机C盘新建一个名为“upload”的文件夹,否则会出现如下异常:java.io.IOException: The temporary upload location [C...
Servlet 3.0及以上版本引入了对多文件上传的支持,使得处理文件上传更加简洁。 对于下载部分,无论是Struts2还是Servlet,核心思路都是读取服务器上的文件内容,并将其写入到响应流中,以便客户端能够接收到并保存...
文件上传通常涉及到`Part`接口,这是Servlet 3.0及以上版本引入的,用于处理multipart/form-data类型的HTTP请求,这种类型常用于文件上传。 1. **multipart/form-data**: 这是一种HTTP请求内容类型,允许在表单数据...
Spring MVC 学习总结(五)——校验与文件上传 目录 2.2.7、范围 2.2.8、其它注解 2.3、注解控制器参数 1.4、在UI中添加错误标签 1.5、测试运行 三、使用jQuery扩展插件Validate实现前端校验 3.1、jQuery扩展插件...
9. **上传文件支持**:通过MultipartFile接口,Spring MVC提供了一种优雅的方式来处理HTTP请求中的文件上传。 在org.springframework.web.servlet-3.0.0.M4.jar中,除了核心组件之外,还包括了Spring的许可证信息,...
在Java中,我们可以使用Servlet API来处理HTTP请求,特别是`Part`接口,它是Servlet 3.0引入的,专门用于处理多部分表单数据(如文件上传)。首先,需要在HTML表单中设置`enctype="multipart/form-data"`,然后在...
描述提到,只需要将两个JSP文件放在同一目录下即可使用,这暗示了我们将分析这两个文件——doUpload.jsp和UploadExample.jsp——如何协同工作来处理文件上传请求。 首先,我们来理解JSP(JavaServer Pages)的基本...
《Java Web服务器文件上传——基于sun java jdk 1.4.2_08的upload.jar解析》 在Java Web应用程序开发中,文件上传是一项常见的功能需求,它允许用户将本地文件发送到Web服务器进行存储或处理。在这个场景中,...
Java上传组件是软件开发中一个重要的工具,尤其是在...在实际开发中,可以选择像Apache HttpClient、Servlet 3.0的Part API或者第三方库如JQuery File Upload、Resumable.js等,它们都提供了文件上传及进度显示的支持。
`Part`接口是Java Servlet 3.0引入的,用于处理multipart/form-data类型的请求,这是文件上传通常使用的格式。 3. **接收文件**:调用`Part`的`getInputStream()`方法获取文件流,然后将其写入到服务器的指定位置,...
3. **Servlet 3.0 的 Part**:Servlet 3.0规范中引入了一种新的文件上传机制——Part对象。尽管这种方式更为现代且功能强大,但由于兼容性问题,目前尚未得到广泛应用。 4. **COS (Commons Open Source)**:这是一个...
- 在服务器端,需要处理`Part`对象,这是Servlet 3.0及以上版本中用于处理文件上传的部分。这部分代码可能涉及文件的临时存储、大小检查、文件类型验证等。 4. **工具应用** 在实际开发中,我们可能会使用一些库...
第15章 在线文件上传和下载(struts 2.x+fileupload) 15.1 在线文件上传和下载模块原理 15.2 文件上传组件fileupload 15.3 初步使用文件上传组件(components-fileupload) 15.4 单文件的上传 15.5 多...
1. **大文件上传/下载**:在用户上传大文件时,可以暂停处理并释放线程,直到文件传输完成再恢复处理。 2. **长时计算**:对于需要大量计算的任务,可以先保存当前状态,然后释放线程去做其他工作,待计算完成后再...
7. **上传下载支持**:SpringMVC内置了处理文件上传和下载的功能。通过MultipartFile接口,我们可以方便地处理用户提交的文件,同时,也可以通过StreamingResponseBody实现大文件的下载。 8. **RESTful风格的支持**...
第15章 在线文件上传和下载(Struts 2.X+FileUpload) 第16章 网上投票系统(Struts2.X+JFreeChat) 第17章 商业银行网上账户管理系统(Struts2.X) 第18章 Hibernate分页系统(Hibernate3.0) 第19章 生成保表...
第15章 在线文件上传和下载(Struts 2.X+FileUpload) 第16章 网上投票系统(Struts2.X+JFreeChat) 第17章 商业银行网上账户管理系统(Struts2.X) 第18章 Hibernate分页系统(Hibernate3.0) 第19章 生成保表...
第15章 在线文件上传和下载(Struts 2.X+FileUpload) 第16章 网上投票系统(Struts2.X+JFreeChat) 第17章 商业银行网上账户管理系统(Struts2.X) 第18章 Hibernate分页系统(Hibernate3.0) 第19章 生成保表...