当我们在 HTML表单中选择本地文件之后点击“提交”按钮则会将文件上传到服务器中,此时该 HTTP 请求正文的数据类型就是multipart/form-data 型的。而在 Servlet 技术中,该 HTTP 请求会被 Servlet 容器(如Tomcat)包装成 HttpServletRequest 对象,再由端所请求的相应 Servlet 进行处理。
但是,如果此时我们在服务器端编写的 Servlet 一点点地解析这个HTTP 请求,分离出其中的文本表单和上传的文件类型,这未免有点低效。于是,我们可以使用 Apache 开源上传软件包fileupload 来简化这一过程,直接使用即可。下载地址:http://commons.apache.org/fileupload/
在 fileupload 包中, HTTP请求中的复杂表单元素都被看做一个 FileItem 对象;FileItem 对象必须由 ServletFileUpload 类中的parseRequest() 方法解析 HTTP 请求(即被包装之后的 HttpServletRequest对象)出来,即分离出具体的文本表单和上传文件;而 ServletFileUpload 对象的创建需要依赖于FileItemFactory 工厂将获得的上传文件 FileItem 对象保存至服务器硬盘,即 DiskFileItem对象。
DiskFileItemFactory是创建FileItem对象的工厂包括方法:
————1.public voidsetSizeThreshold(int?sizeThreshold)
设置内存缓冲区的大小,默认值为10K,如果文件大于10K,将使用临时文件缓
存上传文件.
2.public voidsetRepository(java.io.File repository)
指定临时文件目录
3.publicDiskFileItemFactory();
ServletFileUpload负责处理上传的文件数据,并将表单中每个输入项封装成
一个FileItem对象中.
常用方法:
1.booleanisMultipartContent(HttpservletRequest request)
判断上传表单是否为上传表单类型
2.ListparseRequest(HttpServletRequest request)
对requests对象进行解析,并把表单中的每一个输入项包装成一个fileItem
对象,并返回一个保存了所有FileItem的list集合.
3.setFileSizeMax(longfileSizeMax)设置上传文件最大值
4.setSizeMax(longsizeMax)设置上传文件总量的最大值
5.setHeaderEncoding()设置编码格式