上一个任务/上一节 下一个任务/下一节
目录
(2) FileItemFactory 接口与 DiskFileItemFactory 类
3.1.2使用 commons-fileupload 组件上传文件
(3) 解析 request 请求,获取 FileItem 对象集合。
任务1 实现新闻配图
关键步骤如下
- 获取commons-fileupload 组件
- 配置commons-fileupload组件
- 编码实现文件上传
3.1.1 认识第三方控件
在进行项目开发时,很多功能需要编写大量的代码,业务逻辑复杂,实现相对困难。
在以前,这些功能只能由程序员编码完成,但是有了第三方控件,实现功能就相对简单
了。什么是第三方控件?如何在项目中使用第三方控件?请带着这些问题来学习下面的
内容。
1.第三方控件简介
第三方控件又被称为第三方组件,本书将统一采用第三方组件方式进行后续的描述。
第三方组件不是软件本身就具有和提供的功能,而是由一个新的组织或者各人开发出来
的功能软件。
使用第三方组件,程序员可以避免大量编码,减少开发工作量及由于逻辑或算法造
成的程序异常,从而降低开发成本,提高开发效率。第三方组件也存在缺点,由于第三
方组件是第三方组织或个人提供的,在开发时提供的版本可能会出现Bug。一旦出现
Bug,在解决时就相当麻烦。
2.commons-fileupload 组件与API
虽然使用第三方组件可能会出现Bug,但其优势还是非常明显的,而且有很多非常
使用的组件已被广泛应用到各种项目中。其中,commons-fileupload组件是由Apache开
发的一个应用于文件上传的组件,其特点就是使用方便,简单。该组件涉及的API介绍
如下。
(1)FileItem接口
FileItem 是一个接口,在该接口中定义了用于处理表单内容以及文件内容的方法。
在应用过程中,每一个表单中的单个字段元素,都会被封装成一个FileItem类型的对象,
通过调用FileItem 对象的相关方法可以得到相关表单字段元素的数据。在应用程序中,
可以直接用FileItem 接口进行访问。
FileItem 接口的常用方法如表3-1 所示。
方法 | 返回类型 | 说明 |
---|---|---|
getFileName() | String | 返回表单字段元素的name属性值 |
isFormField() | boolean | 判断FileItem封装的数据是属于普通表单字段还是文件表单字段,普通表单字段返回true,文件表单字段返回false |
getName() | String | 返回上传文件字段中的文件名,文件名通常是不含路径信息的,取决于浏览器实现 |
write(File file) | void | 将FileItem对象中的内容保存到指定文件中 |
getString(String encoding) | String | 按照指定的编码格式将内容转换成字符串返回 |
提示
FileItem 接口的其他方法请参考 API文档进行学习。
(2) FileItemFactory 接口与 DiskFileItemFactory 类
FileItemFactory 是一个接口,是用于构建FileItem 实列的工厂。
DiskFileItemFactory 类是 FileItemFactory 接口的实现类,在使用过程中,可以使用
DiskFileItemFactory 类构造一个FileItemFactory 接口类型的实列,语法格式如下。
FileItemFactory factory = new DiskFileItemFactory();
(3) ServletFileUpload 类
ServletFileUpload 类是 Apache 文件上传组件中用于处理文件上传的一个核心类。
它的作用是以 List 形式返回每一个别封装成 FileItem 类型的表单元素集合。
ServletFileUpload 类的构造语法如下。
public ServletFileUpload(FileItemFactory fileitemfactory)
ServletFileUpload 类的常用方法如表 3-2 所示。
方法 | 返回类型 | 说明 |
---|---|---|
isMutipartContent(HttpServletRequest request) | boolean | 静态方法,用于判断请求数据中的内容是否是multipart/form-data 类型,是返回 true,否返回 false |
parseRequest(HttpServletRequest request) | List | 将请求数据中的每一个字段单独封装成 FileItem 对象,并以集合方式返回 |
提示
ServletFileUpload 类的其他方法请参考 API 文