
FileUpload 是 Apache commo来自ns下面的一个子项目,用来实现Java环境下面的文件上传功能,与常见的SmartUpl致器越给oad齐名。
- 外文名称 fileupload
- 所属项目 Apache commons
使用组来自件
可以通过许多360百科种不同的方式使用组件F我丰缺告ileUpload,这个主要取决于你的应用程序。在最简单的情况下,你可以调用单一的方法去解析这个 Servlet Request,然后处理选项列表,并应用到你的应用程序。另一方面,你可能决定自定义FileUpload,实现对选项列表中个别项完全控制。例如:你可以将内容注入到数据库。
这里,我们将描述组件FileUpload的基本原则,并讲解一些简单的、常用的使用模式。FileUpload自终定制将在其他地方描述。
组件FileUpload依赖于Commons IO组件,因此在继续灯即题之前,要确保在你的工程classpath中有描述页中提到的相应版本。(这里FileUpload版本为:commons- fileupload-1.2.1,Commons IO版本为:commons-io-1.4)
工作原理
上传的文件要求包括一个根据RFC 1867(在HTML中基于表单的文件)编码的选项列表清单。组件FileUploa团终种钱印职d可以解析这个请求,并给你的应用程序提供一份独立上传的项目清单。无论每个项目背后如何执行都实现了FileItem接口。
这里将描述组件FileUpload库的普通API,这些API比较简单。不过,对于最终的实现,你可以参考最新的API流。
每置日防烧判迅世一个文件项目都有一些属性,这些可能在你的应用程序钱中应用到。比如:每一个项目有一个名称name和内容类型content type,并提供了一个 InputStream访问其数据。另一方面,你处理项目的方法可能有核济读换迫孙审境八所不同,这个依赖于是否这个项目是一个规则的表单域,即:这按个数据是来自普通的表单文本,还是普通的HTML域或是一个上传文件。在FileItem接口中提供了处理这些问题的方法,可以更加方便的去访问这些数据。
组件FileUpload使用FileItemFactory工厂创白众限普片突建新的文件项目。这个给了组件F远走称ileUpload很大的灵活性。这个工厂拥有怎样创建项目的最终控制权。工厂执行过程中上传项目文件的临时数据可以存储在内存中或硬盘上。这个依赖于上传项目的大小(即:数据的字节)。不过这种行为可以在你的应用程序中适当的自定制。
解析
来自在实现上传项目之前,当然需要解析这个请求。确保这个请求的确是一个正确的上传文件,组件File径搞看燃Upload为了使这个判断简单,提供了一个静态的方法360百科去做这个事情。
// 检测我们是否一个文件上传的请求
boolean isMultipart = ServletFileUpload.isMultipartContent(requ映决呀法est);
实例
最简单的使用情况如下:
* 上传项目只要足够小,就应该将其保存在内存中。
* 较大的项目应该被写入到硬盘的临时文件中。
* 应该避免有非常大的上传项目。
* 设置项目默认的在内存中所占的空间,限制最大的上传请求,并设定临时文件 的位置。
处理这种情况下的请求非常的简单:
// 创建磁盘工厂
FileItemFactory factory = new DiskF七止命ileItemFactor非扩杨达y();
// 创建处理工具
ServletFileUpload upload = new ServletFileUpload(factory);
// 解析
List <FileItem> items = uploa植任司d.parseRequest(request);
这就是我们真正需要的全部代码。
处理的结果是生成了一个究表底组迫奏副果文件项目列表,每个文件项目实现一个FileItem接口。下面将介绍如何处理这些项目。
控制
如果你的使用情况和上面描述的例子很接近,但是你需要在一点更多的控制限构定文件的大小或临时文件的存放位置。你可以很容易的自定义上传实例或文件项目或房巴料按飞两者的行为。下面例子展示了几种配置选项:
// 创建磁盘工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置参数
们 factory.setSizeThreshold(yourMaxMemorySize);
factory.setReposit油精敌界ory(yourTemp判轮细局左Directory);
// 创建处理工具
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置最大允许的尺寸
upload.setSizeMax(yourMaxRequestSize);
// 解析
List <FileItem> items = upload.parseRequest(request);
当然银我无,每一个配置处理方法调红和困都是独立于其他方法的,但是如果你想一次性配置这个工厂,你可以使用工厂的另一个重载方法。像这样:
Dis指或kFileItemFactory factory = 念续取派著众绝磁六new DiskFileIt帮极展emFactory江垂斤社呼自衣宗( yourMaxMemorySize, yourTempDirectory);
如果你还需要更多的控制请求的解析,比如存储项目到其它地方(如:数据库),你将需要看看FileUpload自定义(注:不知道为什么这里链接过去的页面什么也没有)。
评论留言