传智播客Java web学习-文件上传组件的应用

来源:互联网 发布:云计算建设方案 编辑:程序博客网 时间:2024/06/05 23:44

      今天学习Apache文件上传组件fileupload,张老师讲到,fileupload的新版本已经有了,学习他主要是学习他实现的原理,没必要追求最新的。他们的核心思想都是一样的,掌握了1.0版本的,通过查看1.2版本的帮助文档,基本上也就会使用1.2版本的了。我们要学习的是编程思想和编程技巧,完全不必关心版本的问题。
    Apache文件上传组件,用于接受浏览器上传的文件。该组件有多个类组成,开发人员要掌握其中的三个类:DiskFileUpload,FileItem和FileUploadException,都在org.apache.commons.fileupload包中。
   DiskFileUpload类是apache文件上传组件的核心类,我们要通过这个类与apache文件上传组件进行交互。下面是它的几个方法
  1 setSizeMax方法,用于设置请求消息实体内容的最大允许大小,防止客户端上传过大的文件,单位为字节。如果请求消息中实体内容大小超过了该方法的设置值,将会抛出fileuploadException异常。
 2 setSizeThreshold方法,Apache文件上传组件在解析和处理上传数据的每个字段的内容时,需要临时保存解析出的数据。java虚拟机默认可以使用的内存空间是有限的,超出限制就会发生“java.lang.OutOfMemoryError”错误。如果上传文件过大,内存中无法保存该文件,Apache文件上传组件将用临时文件来保存这些数据。该方法用于设置是否使用临时文件保存解析出的数据的那个临界值。传入参数的单位是字节。public void setSizeThreshold(int sizeThreshold)
 3  setRepositoryPath方法,用于设置临时文件的存放目录,这里要求使用绝对路径。 public void  setRepositoryPath(String  repositoryPath)
  public void setSizeMax(long sizeMax)
  4 parseRequest方法 ,是对http请求消息的进行解析的入口方法,如果请求消息中实体内容的类型不是“multipart/form-data”,该方法将抛出FileUploadException异常。该方法解析出form表单中每个字段的数据,并将他们分别包装成独立的FileItem对象,然后将这些FileItem对象加入到一个List类型的集合对象中返回。
   public List parseRequest(HttpServletRequest req )
  还有一个重载的方法
   public List parseRequest(HttpServletRequest req,int sizeThreshold,long sizeMax,String path),该方法集中处理上述所有方法的功能。
5 isMultipartContent方法,该方法用于判断请求消息中的内容是否是“multipart/form-date”类型,是即返回true,否则返回false,它是一个静态方法。
public static final boolean isMultipartContent(HttpServletRequest req)
6 setHeaderEncoding 方法,对于浏览器上传给web服务器的各个表单字段的描述头内容,Apache文件上传组件需要将他们转换成字符串形式返回。该方法用于设置转换时所使用的字符集编码。参数encoding用于指定字符集编码
public  void setHeaderEncoding(String encoding)

FileItem 类,用于封装单个表单字段元素的数据,一个表单字段元素对应一个FileItem对象,通过调用FileItem对象的方法可以获得表单字段元素的数据。他实际上是一个接口,并继承了Seralizable接口,以支持序列化操作。我们使用的是该接口的一个实现类,使用FileItem接口类型对他进行引用和访问。下面是FileItem的几个方法。
  1.isFormField方法 用于判断FileItem封装的数据是属于一个普通表单字段,还是一个文件表单字段。普通表单字段返回true,否则返回false。
   public boolean isFormField()
2.getName方法,用于获得文件上传字段的文件名。如果FileItem对应的是普通表单字段,getItem方法将返回null。
  public String getName()
3 getFieldName方法 ,用于返回表单字段元素的name属性值
public String getFieldName()
4write方法,用于将FileItem中保存的主题内容保存到某个指定的文件中。
  public void write(File file)
5 getString方法,用于将FileItem中保存的内容作为一个字符串返回。
  public String getString()
  public String getString(String encoding)//使用指定的字符集编码
6  getContentType方法  用于获得上传文件的类型,如果FileItem对应的是普通表单字段,则返回null。
 public String getContentType()
7 isInMemory 方法 ,用于判断FileItem封装的主体内容存放的位置,如果存储在内存中则返回true,存储在临时文件中则返回false。
public boolean isInMemory()
8 delete方法 用来情况FileItem中存放的主体内容,如过保存在临时文件中,将删除临时文件。
public void delete()。