文件上传组件File,DiskFileItemFactory ,ServletFileUpload ,FileItem

文件上传组件中,如果对File,DiskFileItemFactory ,ServletFileUpload ,FileItem这四个类理解了,也就理解了文件上传组件。


http://blog.csdn.net/smallhorn/article/details/7864658

FileItem类的常用方法

1.boolean isFormField()。isFormField方法用来判断FileItem对象里面封装的数据是一个普通文本表单字段,还是一个文件表单字段。如果是普通文本表单字段,返回一个true否则返回一个false。因此可以用该方法判断是否是普通表单域还是文件上传表单域。

2.String getName()。getName方法用来获得文件上传字段中的文件名。

3.String getFieldName()。getFieldName方法用来返回表单标签的name属性的值。

4.void write(File file)。write方法将FileItem对象中的内容保存到某个指定的文件中。如果FileItem对象中的内容是保存在某个临时文件中,该方法完成后,临时文件可以会被删除。该方法也可以将普通表单字段保存在一个文件中,但最主要的用途是把上传的文件内容保存在本地文件系统中。

5.String getString()。getString()方法将FileItem对象中保存的数据流内容以一个字符串返回。它有两个重载形式。public java.lang.String getString()和public java.lang.String getString(java.lang.String encodeing) throws java.io.UnsupportedEncodingException。前者使用缺省的字符集编码将主体内容转换成字符串,后者使用参数指定的字符集编码。如果在读取普通表单字段元素的内容时,出现了乱码现象,可以调用第二个方法,并传入 正确的字符集编码名称。

6.String getContentType()。此方法用来获得上传文件的类型,即标段字段元素描述头属性“content-type”的值,如image/jpeg。如果FileItem对象对应的是普通的表单字段,将返回null。

7.boolean isInMemory()。判断FileItem对象封装的数据是保存在内存中还是硬盘中。

8.void delete()。此方法用来清空FileItem对象中封装的主体内容,如果内容是被保存在临时文件中,该方法会把临时文件删除。

9.InputStream getInputStream()。以流的形式返回上传文件的主体内容。

10.long getSize()。返回上传文件的大小。


http://blog.csdn.net/smallhorn/article/details/7861915


java.io.File类

File(File parent,String child)根据parent的抽象路径名和child的路径名,创建一个File实例。

File(String pathname)通过将给定的路径名字符串转换成抽象路径名来创建一个File实例。

File(String parent,String child)根据patent的路径名字符串和child字符串来创建一个File实例。

DiskFileItemFactory类

将请求消息中的每一个项目封装成单独的DiskFileItem(FileItem接口的具体实现)的工作,由org.apache.commons.fileupload.disk.DiskFileItemFactory(org.apache.commons.fileupload.FileItemFactory接口的具体实现)来完成。当上传的文件较小的时候自己存在内存中,比较大时,就保存到磁盘的临时文件夹。

DiskFileItemFactory的属性中,public static int DEFAULT_SIZE_THRESHOD:将文件保存在内存还是临时文件件的默认临界值,默认值是10240,10K。private File repository:用于配置在创建文件项目时,当文件项目大于临界值时使用的临时文件夹,默认采用系统默认的临时文件路径,可以通过系统属性 java.io.tmpdir获取。如下代码:

System.getProperty("java.io.tmpdir");private int sizeThreshod:用于保存将文件保存在内存还是临时文件夹的临界值。

构造方法:public DiskFileItemFactory()采用默认临界值和系统临时文件夹来磁盘文件项目工厂;

public DiskFileItemFactory(int sizeThrehold,File repository)采用sizeThrehold为临界值, repository作为临时文件夹来创建磁盘文件项目工厂。

方法:FileItem createItem()根据DiskFileItemFactory的相关配置将每一个请求消息实体项目创建成

FileItem实例并返回。该方法从来不需要我们亲自调用,fileupload在解析时自动调用。

void setSizeThrehold(int sizeThrehold)Apache上传组件在解析上传数据的每个字段内容的时候, 需要临时保存解析出来的数据,以便后面进一步的处理。因为Java虚拟机默认的可以使用的内存空间上 有限的,超出限制时会抛出“java.lang.OutOfMemoryError”的错误。如果上 传的文件很大,在内存 中将无法临时保存该文件的内容,Apache上传组件转而采用临时 文件夹来保存该文件的内容。此方法 设置将文件存放在内存还是临时文件夹的临界值。

void setRepository(File respository)此方法设置当文件的大小超出sizeThrehold临界值时,将文件以临时文件保存在磁盘上的存放目录。有一个对应的获得临时文件夹的方法File getRespository()。没有调用该方法,Tomcat默认的临时目录为“tomcat/temp/”。

ServletFileUpload类

org.apache.commons.fileupload.servlet.ServletFileUpload类似apache文件上传组件处理文件上传的核心高级类,使用其parseRequest(HttpServletRequest)方法可以将表单提交的数据封装成FileItem类,然后以List的形式返回。如果你希望进一步提高性能,可以使用getItemIterator方法,直接获得每一文件项的数据输入流,对数据进行直接处理。在使用ServletFileUpload对象解析请求时,需要根据DIskFileItemFactory的属性sizeThrehold ,Respository来决定解析得到的数据是保存在内存还是某个临时目录中。所以,我们要做解析前,构造好DiskFileItemFactory对象。通过ServletFileUpload的构造方法,或者setFileItemFactory()方法设置ServletFileUpload对象的fileItemFactory属性

构造方法:public ServletFileUpload(),构造一个未初始化的实例,需要在解析请求之前调用setFileItemFacotry方法,设置fileItemFactory属性。

public ServletFileUpload(FileItemFactory fileItemFactory)构造一个实例并根据指定的 FileItemFactory对象设置fileItemFactory属性。

常用方法:1.public void setSizeMax(long sizeMax)。该方法继承FileUploadBase类,用于设置请求消息实体内容(所有上传的数据)的最大尺寸限制,防止客户端恶意上传大文件浪费服务器的存储空间。在请求解析的过程中,如果请求消息体的内容超过了setSizeMax方法设置值,将会抛出FileUploadBase内部定义的SizeLimitExceededException(FileUploadException的子类)。该方法有一个对应的读方法:public long getSizeMax()。

2.public void setFileSizeMax(long fileSizeMax),该方法继承自FileUploadBase类,用来设置单个上传文件的最大尺寸。该方法有一个对应的读方法 public long getFileSizeMax()。在请求解析的过程中,如果单个文件上传的大小超过了setFileSizeMax的设置值,将会抛出FileUploadBase内部定义的FileSizeLimitExceededException

(FileUploadException异常的子类)异常。

3.public List parseRequest(javax.servlet.http.HttpServletRequest request)。parseRequest是ServletFileUpload类的主要方法,它是对Http请求消息体内容进行解析的入口方法。它解析出Form表单中的每一个字段的数据,并将它们分别包装成独立的FileItem对象,然后将这些对象装入一个List类型的集合对象返回。该方法抛出

FileUploadException异常类处理诸如文件尺寸过大,请求消息中的实体内容不是“multipart/form-data”,IO异常,请求消息体长度信息丢失等异常。这些异常都是FileUploadException的一个子类。

4.public FileItemIterator getItemIterator(HttpServletRequest request)。getItemIterator方法和

parseRequest方法基本相同。但是getItemIterator方法返回的是一个迭代器,该迭代器里面保存的不是FileItem对象,而是FileItemStream对象,如果你希望进一步提高性能,你可以是使用该方法,直接获得每一个文件项的数据输入流,做底层处理。如果性能不是问题,你可以用parseRequest方法。

5.public static boolean isMultipartContent(HttpServletRequest request)。方法的用法和作用如名字所表示的。

6.getFileItemFactory()和setFileItemFactory(FileItemFactory fileItemFactory)方法继承值

FileUpload类,用于设置和读取fileItemFactory属性。

7.public void setProgressListener(ProgressListener pListener)。设置文件上传进度监听器,该方法有一个对应的读取方法ProgressListener getProgressListener()。

8.public void setHeaderEncoding()。在文件上传请求的消息体中,除了普通表单域的值是文本内容外,文件上传字段中的文件路径也是文本内容,在内存中保存的是它们的某种字符编码的字节数组。Apache上传组件中读取这些内容时,必须知道他们采用的字符集编码,才能将它们转换成正确的字符文本返回。setHeaderEncoding 继承自FileUploadBase类,用来设置上面的内容的字符编码。如果没有设置则,对应读方法

getHeaderEncoding()得到的是null,将采用HttpServletRequest设置的字符编码。如果HttpServletRequest的字符编码也为null ,则采用系统默认编码。可以通过System.getProperty(“file.encoding”)获得系统默认字符编码。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值