现在的位置: 首页 > 架构设计 > 正文

DiskFileUpload类的使用方法

2019年12月23日 架构设计 ⁄ 共 2569字 ⁄ 字号 评论关闭

  DiskFileUpload类是Apache文件上传组件的核心类,应用程序开发者通过这个类来与Apache文件上传组件进行交互。以下介绍DiskFileUpload类中的几个经常使用的重要方法。

  

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将这个属性设置为了“/temp/”文件夹。

  4. parseRequest方法

  parseRequest 方法是DiskFileUpload类的重要方法,它是对HTTP请求消息进行解析的入口方法,假设请求消息中的实体内容的类型不是“multipart/form-data”,该方法将抛出FileUploadException异常。parseRequest 方法解析出FORM表单中的每一个字段的数据,并将它们分别包装成独立的FileItem对象,然后将这些FileItem对象增加进一个List类型的集合对象中返回。parseRequest 方法的完整语法定义例如以下:

  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 Web开发内幕——核心基础》一书中的第6.9.2的解说,“multipart/form-data”类型的表单为表单字段内容选择字符集编码的原理和方式与“application/x-www-form-urlencoded”类型的表单是同样的。FORM表单中填写的文本内容和文件上传字段中的文件路径名在内存中就是它们的某种字符集编码的字节数组形式,Apache文件上传组件在读取这些内容时,必须知道它们所採用的字符集编码,才干将它们转换成正确的字符文本返回。

  对于浏览器上传给WEBserver的各个表单字段的描写叙述头内容,Apache文件上传组件都须要将它们转换成字符串形式返回,setHeaderEncoding 方法用于设置转换时所使用的字符集编码,其原理与笔者编著的《深入体验java Web开发内幕——核心基础》一书中的第6.9.4节解说的ServletRequest.setCharacterEncoding方法同样。setHeaderEncoding 方法的完整语法定义例如以下:

  public void setHeaderEncoding(String encoding)

  当中,encoding參数用于指定将各个表单字段的描写叙述头内容转换成字符串时所使用的字符集编码。

  注意:假设读者在使用Apache文件上传组件时遇到了中文字符的乱码问题,一般都是没有正确调用setHeaderEncoding方法的原因。

抱歉!评论已关闭.