支持文件上传是web程序最基本和常见的需求。在早期的servlet规范中,实现文件上传须要使用第三方库或者复杂的输入处理。针对此问题,servlet如今以通用和可移植的方式帮助提供了一个可行的解决方案。servlet技术如今提供开箱即用的上传文件方法,因此任何实现规范的web容器都能经过HttpServletRequest 对象解析multipart请求和生成有效的mime附件。
一个新的注解,javax.servlet.annotation.MultipartConfig,用来代表须要multipart/form-data类型请求的定义上。使用@MultipartConfig注解的servlet均可以经过调用 request.getPart(String name)或request.getParts()方法获取一个给定的multipart/form-data请求中的Part构件。java
@MultipartConfig注解提供下面这些可选的属性:web
例如,@MultiPartConfig能够以下构造:编码
@MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024, maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)
代替使用 @MultipartConfig注解在你的upload servlet中硬编码这些属性,须要在web.xml中做为一个子节点添加下面的节点:操作系统
<multipart-config> <location>/tmp</location> <max-file-size>20848820</max-file-size> <max-request-size>418018841</max-request-size> <file-size-threshold>1048576</file-size-threshold> </multipart-config>
servlet规范定义了HttpServletRequest的两个附加方法:code
request.getParts()方法返回全部Prat集合。若是你有超过一个文件类型的输入,将返回多个Part对象。由于全部Part对象都被命名, getPart(String name)方法用来访问特定的Part对象。另外,getParts()返回Iterable<Part>能够用来遍历全部Part。
javax.servlet.http.Part是简单的,提供每一个Part的自省方法。方法列表:orm
例如,Part 接口提供write(String filename) 方法以特定名称写入到文件中。文件能够使用@MultipartConfig注解定义的location直接保存,在fileupload示例中,location是由表达中的属性定义的。xml