【Jsp精品源码栏目提醒】:网学会员为广大网友收集整理了,【精品】Sturts文件上传FileUpload - 其它资料,希望对大家有所帮助!
org.apache.commons.fileupload.DiskFileUpload 使用上1.setSizeMax 方法setSizeMax 方法用于设置请求消息实体内容的最大允许大小,以防止客户端故意通过上传特大的文件来塞满服务器端的存储空间,单位为字节。
2.setSizeThreshold 方法Apache 文件上传组件在解析和处理上传数据中的每个字段内容时,需要临时保存解析出的数据。
因为 Java 虚拟机默认可以使用的内存空间是有限的(笔者测试不大于 100M),超出限制时将会发生“java.lang.OutOfMemoryError”错误,如果上传的文件很大,例如上传 800M 的文件,在内存中将无法保存该文件内容,Apache 文件上传组件将用临时文件来保存这些数据;但如果上传的文件很小,例如上传 600 个字节的文件,显然将其直接保存在内存中更加有效。
setSizeThreshold 方法用于设置是否使用临时文件保存解析出的数据的那个临界值,该方法传入的参数的单。
3. setRepositoryPath 方法setRepositoryPath 方法用于设置 setSizeThreshold 方法中提到的临时文件的存放目录,这里要求使用绝对路径。
其完整语法定义如下:public void setRepositoryPathString repositoryPath如果不设置存放路径,那么临时文件将被储存在quotjava.io.tmpdirquot这个 JVM 环境属性所指定的目录中,tomcat 5.5.9 将这个属性设置为了“lttomcat 安装目录gt/temp/”目录。
4. parseRequest 方法parseRequest 方法是 DiskFileUpload 类的重要方法,它是对 HTTP 请求消息进行解析的入口方法,如果请求消息中的实体内容的类型不是“multipart/form-data”,该方法将抛出 FileUploadException 异常。
parseRequest 方法解析出 FORM 表单中的每个字段的数据,并将它们分别包装成独立的 FileItem 对象,然后将这些 FileItem 对象加入进一个 List 类型的集合对象中返回。
parseRequest 方法的完整语法定义如下:public List parseRequestHttpServletRequest reqparseRequest 方法还有一个重载方法,该方法集中处理上述所有方法的功能,其完整语法定义如下:parseRequestHttpServletRequest reqint sizeThresholdlong sizeMaxString path这两个 parseRequest 方法都会抛出 FileUploadException 异常。
5. isMultipartContent 方法isMultipartContent 方法方法用于判断请求消息中的内容是否是“multipart/form-data”类型,是则返回 true,否则返回 false。
isMultipartContent 方法是一个静态方法,不用创建 DiskFileUpload 类的实例对象即可被调用,其完整语法定义如下:public static final boolean isMultipartContentHttpServletRequest req6. setHeaderEncoding 方法由于浏览器在提交 FORM 表单时,会将普通表单中填写的文本内容传递给服务器,对于文件上传字段,除了传递原始的文件内容外,还要传递其文件路径名等信息,如后面的图 1.3 所示。
不管 FORM 表单采用的是“application/x-www-form-urlencoded”编码,还是“multipart/form-data”编码,它们仅仅是将各个 FORM 表单字段元素内容组织到一起的一种格式,而这些内容又是由某种字符集编码来表示的。
关于浏览器采用何种字符集来编码 FORM 表单字段中的内容,请参看笔者编著的《深入体验 java Web 开发内幕——核心基础》一书中的第 6.9.2 的讲解,“multipart/form-data”类型的表单为表单字段内容选择字符集编码的原理和方式与“application/x-www-form-urlencoded”类型的表单是相同的。
FORM 表单中填写的文本内容和文件上传字段中的文件路径名在内存中就是它们的某种字符集编码的字节数组形式,Apache 文件上传组件在读取这些内容时,必须知道它们所采用的字符集编码,才能将它们转换成正确的字符文本返回。
对于浏览器上传给 WEB 服务器的各个表单字段的描述头内容,Apache 文件上传组件都需要将它们转换成字符串形式返回,setHeaderEncoding 方法用于设置转换时所使用的字符集编码,其原理与笔者编著的《深入体验 java Web 开发内幕——核心基础》一书中的第 6.9.4 节讲解的ServletRequest.setCharacterEncoding 方法相同。
setHeaderEncoding 方法的完整语法定义如下:public void setHeaderEncodingString encoding其中,encoding 参数用于指定将各个表单字段的描述头内容转换成字符串时所使用的字符集编码。
注意:如果读者在使用 Apache 文件上传组件时遇到了中文字符的乱码问题,一般都是没有正确调用 setHeaderEncoding 方法的原因。
1.2.3 FileItem 类 一个表单字段元素对应一个 FileItem 对象,FileItem 类用来封装单个表单字段元素的数据,通过调用 FileItem 对象的方法可以获得相关表单字段元素的数据。
FileItem 是一个接口,在应用程序中使用的实际上是该接口一个实现类,该实现类的