DiskFileUpload类
1.2.2 DiskFileUpload类DiskFileUpload类是Apache文件上传组件的核心类,应用程序开发者通过这个类来与Apache文件上传组件进行交互。以下介绍DiskFileUpload类中的几个经常使用的重要方法。 1.setSizeMax方法 setSizeMax方法用于设置请求消息实体内容的最大同意大小,以防止client有益通过上传特大的文件来塞满server端的存储空间,单位为字节。其完整语法定义例如以下: public void setSizeMax(long sizeMax) 假设请求消息中的实体内容的大小超过了setSizeMax方法的设置值,该方法将会抛出FileUploadException异常。 2.setSizeThreshold方法 Apache文件上传组件在解析和处理上传数据中的每一个字段内容时,须要暂时保存解析出的数据。由于Java虚拟机默认能够使用的内存空间是有限的(笔者測试不大于100M),超出限制时将会发生“java.lang.OutOfMemoryError”错误,假设上传的文件非常大,比如上传800M的文件,在内存中将无法保存该文件内容,Apache文件上传组件将用暂时文件来保存这些数据;但假设上传的文件非常小,比如上传600个字节的文件,显然将其直接保存在内存中更加有效。setSizeThreshold方法用于设置是否使用暂时文件保存解析出的数据的那个临界值,该方法传入的參数的单位是字节。其完整语法定义例如以下: public void setSizeThreshold(int sizeThreshold) 3. setRepositoryPath方法 setRepositoryPath方法用于设置setSizeThreshold方法中提到的暂时文件的存放文件夹,这里要求使用绝对路径。其完整语法定义例如以下: public void setRepositoryPath(String repositoryPath) 假设不设置存放路径,那么暂时文件将被储存在"java.io.tmpdir"这个JVM环境属性所指定的文件夹中,tomcat 5.5.9将这个属性设置为了“<tomcat安装文件夹>/temp/”文件夹。 4. parseRequest方法 parseRequest 方法是DiskFileUpload类的重要方法,它是对HTTP请求消息进行解析的入口方法, public List parseRequest(HttpServletRequest req) parseRequest 方法另一个重载方法,该方法集中处理上述全部方法的功能,其完整语法定义例如以下: parseRequest(HttpServletRequest req,int sizeThreshold,long sizeMax, String path) 这两个parseRequest方法都会抛出FileUploadException异常。 5. isMultipartContent方法 isMultipartContent方法方法用于推断请求消息中的内容是否是“multipart/form-data”类型,是则返回true,否则返回false。isMultipartContent方法是一个静态方法,不用创建DiskFileUpload类的实例对象就可以被调用,其完整语法定义例如以下: public static final boolean isMultipartContent(HttpServletRequest req) 6. setHeaderEncoding方法 因为浏览器在提交FORM表单时,会将普通表单中填写的文本内容传递给server,对于文件上传字段,除了传递原始的文件内容外,还要传递其文件路径名等信息,如后面的图1.3所看到的。无论FORM表单採用的是“application/x-www-form-urlencoded”编码,还是“multipart/form-data”编码,它们不过将各个FORM表单字段元素内容组织到一起的一种格式,而这些内容又是由某种字符集编码来表示的。关于浏览器採用何种字符集来编码FORM表单字段中的内容,请參看笔者编著的《深入体验java 对于浏览器上传给WEBserver的各个表单字段的描写叙述头内容,Apache文件上传组件都须要将它们转换成字符串形式返回,setHeaderEncoding 方法用于设置转换时所使用的字符集编码,其原理与笔者编著的《深入体验java Web开发内幕——核心基础》一书中的第6.9.4节解说的ServletRequest.setCharacterEncoding方法同样。setHeaderEncoding 方法的完整语法定义例如以下: public void setHeaderEncoding(String encoding) 当中,encoding參数用于指定将各个表单字段的描写叙述头内容转换成字符串时所使用的字符集编码。 注意:假设读者在使用Apache文件上传组件时遇到了中文字符的乱码问题,一般都是没有正确调用setHeaderEncoding方法的原因。 |
以下介绍FileItem类中的几个经常使用的方法:
1. isFormField方法
isFormField方法用于推断FileItem类对象封装的数据是否属于一个普通表单字段,还是属于一个文件表单字段,假设是普通表单字段则返回true,否则返回false。该方法的完整语法定义例如以下:
public boolean isFormField()
2. getName方法
getName方法用于获得文件上传字段中的文件名称,对于图1.3中的第三个分区所看到的的描写叙述头,getName方法返回的结果为字符串“C:/bg.gif”。假设FileItem类对象相应的是普通表单字段,getName方法将返回null。即使用户没有通过网页表单中的文件字段传递不论什么文件,但仅仅要设置了文件表单字段的name属性,浏览器也会将文件字段的信息传递给server,仅仅是文件名称和文件内容部分都为空,但这个表单字段仍然相应一个FileItem对象,此时,getName方法返回结果为空字符串"",读者在调用Apache文件上传组件时要注意考虑这个情况。getName方法的完整语法定义例如以下:
public String getName()
注意:假设用户使用Windows系统上传文件,浏览器将传递该文件的完整路径,假设用户使用Linux或者Unix系统上传文件,浏览器将仅仅传递该文件的名称部分。
3.getFieldName方法
getFieldName方法用于返回表单字段元素的name属性值,也就是返回图1.3中的各个描写叙述头部分中的name属性值,比如“name=p1”中的“p1”。getFieldName方法的完整语法定义例如以下:
public String getFieldName()
4. write方法
write方法用于将FileItem对象中保存的主体内容保存到某个指定的文件里。假设FileItem对象中的主体内容是保存在某个暂时文件里,该方法顺利完毕后,暂时文件有可能会被清除。该方法也可将普通表单字段内容写入到一个文件里,但它主要用途是将上传的文件内容保存在本地文件系统中。其完整语法定义例如以下:
public void write(File file)
5.getString方法
getString方法用于将FileItem对象中保存的主体内容作为一个字符串返回,它有两个重载的定义形式:
public java.lang.String getString()
public java.lang.String getString(java.lang.String encoding)
throws java.io.UnsupportedEncodingException
前者使用缺省的字符集编码将主体内容转换成字符串,后者使用參数指定的字符集编码将主体内容转换成字符串。假设在读取普通表单字段元素的内容时出现了中文乱码现象,请调用第二个getString方法,并为之传递正确的字符集编码名称。
6. getContentType方法
getContentType 方法用于获得上传文件的类型,对于图1.3中的第三个分区所看到的的描写叙述头,getContentType方法返回的结果为字符串“image/gif”,即“Content-Type”字段的值部分。假设FileItem类对象相应的是普通表单字段,该方法将返回null。getContentType 方法的完整语法定义例如以下:
public String getContentType()
7. isInMemory方法
isInMemory方法用来推断FileItem类对象封装的主体内容是存储在内存中,还是存储在暂时文件里,假设存储在内存中则返回true,否则返回false。其完整语法定义例如以下:
public boolean isInMemory()
8. delete方法
delete
方法用来清空
FileItem类对象中存放的主体内容,假设主体内容被保存在暂时文件里,delete
方法将删除该暂时文件。虽然
Apache
组件使用了多种方式来尽量及时清理暂时文件
,但系统出现异常时,仍有可能造成有的暂时文件被永久保存在了硬盘中。在有些情况下,能够调用这种方法来及时删除暂时文件。其完整语法定义例如以下:
public void delete()
1.2.4 FileUploadException类
在文件上传过程中,可能发生各种各样的异常,比如网络中断、数据丢失等等。为了对不同异常进行合适的处理,Apache文件上传组件还开发了四个异常类,当中FileUploadException是其它异常类的父类,其它几个类仅仅是被间接调用的底层类,
对于Apache组件调用人员来说,仅仅需对FileUploadException异常类进行捕获和处理就可以。
DiskFileUpload类的更多相关文章
- DiskFileUpload类别
1.2.2 DiskFileUpload类 DiskFileUpload类是Apache文件上传组件的核心类,应用程序开发者通过这个类来与Apache文件上传组件进行交互.以下介绍DiskFileUp ...
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- jvm运行时环境属性一览
前言: 在web编程技术内幕中看到一个用apache组件进行文件下载的例子,对于DiskFileUpload类的setRepositoryPath方法,设置临时文件的存放路径,里面指出如果不调用该方法 ...
- Struts的FormFile与Commons-FileUpload控件使用心得
转自: http://www.iteye.com/topic/212566 前一段时间刚来公司,看到一个项目中以前有人写的struts代码.是使用了FormFile来处理关于文件上传的模块.但是用力一 ...
- 文件上传到tomcat服务器 commons-fileupload的详细介绍与使用
三个类:DiskFileUpload.FileItem和FileUploadException.这三个类全部位于org.apache.commons.fileupload包中. 首先需要说明一下for ...
- [转]利用 Commons-Fileupload 实现文件上传
转载 Java Web开发人员可以使用Apache文件上传组件来接收浏览器上传的文件,该组件由多个类共同组成,但是,对于使用该组件来编写文件上传功能的Java Web开发人员来说,只需要了解和使用其中 ...
- C++ 可配置的类工厂
项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
随机推荐
- UpdataData
MFC中有一个UpdataData函数,有二个参数:TRUE和FLASE,二个参数什么时候用, 开始的时候我也迷糊,后来才发现: UpdataData(TRUE):是把控件上的值刷新到变量中: Upd ...
- 算法起步之Kruskal算法
原文:算法起步之Kruskal算法 说完并查集我们接着再来看这个算法,趁热打铁嘛.什么是最小生成树呢,很形象的一个形容就是铺自来水管道,一个村庄有很多的农舍,其实这个村庄我们可以看成一个图,而农舍就是 ...
- iphone开发中数据持久化之——模型对象归档(二)
在Cocoa世界中,术语“归档”是指另一种形式的序列化,它可以实现对任何对象的序列化.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文件,然后再从中读取它们.只要在类中实现的每个属性都是标量(如 ...
- 基于TFTP协议的远程升级设计
说明:因为CSDN博客编辑器对word格式近乎不支持.因此对表格使用了图片方式(最后一个表格未使用图片格式.大家能够看看效果),CSDN博客编辑器上传图片十分不人性化(直接复制图片是不显示的),因此本 ...
- hdu3294(manacher)
传送门:Girls' research 题意:求最长回文串并输出位置及转换后的字符串. 分析:manacher算法算出最长回文串后记录中心位置,然后再转换回原字符串的起始和结束位置. #pragma ...
- hdu1565+hdu1569(最大点权独立集)
传送门:hdu1565 方格取数(1) 传送门:hdu1569 方格取数(2) 定理:1. 最小点权覆盖集=最小割=最大流2. 最大点权独立集=总权-最小点权覆盖集 步骤: 1. 先染色,取一个点染白 ...
- Android自己定义组件系列【2】——Scroller类
在上一篇中介绍了View类的scrollTo和scrollBy两个方法,对这两个方法不太了解的朋友能够先看<自己定义View及ViewGroup> scrollTo和scrollBy尽管实 ...
- 深入理解Tomcat系列之二:源码调试环境搭建(转)
前言 最近对Tomcat的源码比较感兴趣,于是折腾了一番.要调试源码首先需要搭建环境,由于参考了几篇帖子发现都不怎么靠谱,最后还是折腾出来了,然而却花了足足一天的时间去搭建这个环境.发现都不是帖子的问 ...
- Android中怎样在应用A中启动或安装应用B
看到别人做的游戏攻略,想着自己的游戏攻略也加入新的功能,即Android中怎样在应用A中启动或安装应用B.就查了一些资料整理下来. 启动或安装对应的应用的方法: Step1:推断是否安装目标应用.仅仅 ...
- hosts文件导致无法访问网站
前段时间有人反映无论怎么样都无法在自己的电脑上访问法兰克官网,那台电脑的DNS也无法解析,通过查看hosts文件后发现,原来该电脑的hosts文件木马修改过了,屏蔽了相关的域名,删除新增的或者用其他机 ...