近段时间,对apache commons fileupload的源码做了深入的了解,在此把一些见解与大家分享。
今天就简介一下commons fileupload的FileUploadBase部分。
FileUploadBase就像是FileUpload组件的总线,串联起各个部分。其本身提取http包的各个部分然后交由具体的类来解析,从类图我们就能看出它是该组件最庞杂的部分。
org.apache.commons.fileupload.FileUploadBase
该类实现了一些基本的FileUpload功能,但其自身不处理解析部分。其主要工作就是从http中提取出各个属性然后根据属性来调用和传递具体的FileItemFactory类对象来实现解析文件上传的功能。
org.apache.commons.fileupload.FileUploadBase#FileItemIteratorImpl
该类是FileUploadBase的内部类,同时也是FileItemIterator的实现类。其作用是实现一个FileItem的迭代器在FileUploadBase内部被调用。但需要注意的是其next()返回的不是FileItem而是FileItemStream。
org.apache.commons.fileupload.FileUploadBase#FileItemIteratorImpl#FileItemStreamImpl
该类代表了上传的FileItem的输入输出流,是FileItemIteratorImpl.next()返回的具体类。
org.apache.commons.fileupload.FileUploadBase#FileSizeLimitExceededException
该异常会接收一个指定的大小,当文件超过指定大小时会抛出异常。
org.apache.commons.fileupload.FileUploadBase#FileUploadIOException
该异常代理了一个FileUploadException,实际上该异常只扩展了异常原因信息的记录。
org.apache.commons.fileupload.FileUploadBase#InvalidContentTypeException
当解析时发现请求不是一个文件上传请求时抛出该异常。
org.apache.commons.fileupload.FileUploadBase#IOFileUploadException
该异常代理了一个IOException,实际上该异常只扩展了异常原因信息的记录。
org.apache.commons.fileupload.FileUploadBase#SizeException
当请求的文件大小超过允许的最大值时抛出该异常。
org.apache.commons.fileupload.FileUploadBase#SizeLimitExceededException
当请求的文件大小超过允许的最大值时抛出该异常,从类名上就可以看出异常原因,所以比SizeException可读性更好。
org.apache.commons.fileupload.FileUploadBase#UnknownSizeException
但不知道文件大小时,即content-length属性未传、或包含-1时抛出。从1.2开始,content-length已经不再请求,因此该异常被过时。
org.apache.commons.fileupload.FileUpload
该类代理了FileItemFactory,并通过继承FileUploadBase来实现各种通用解析功能。其内部只有FileItemFactory对象的getter和setter方法,以方便其子类使用。
org.apache.commons.fileupload.DiskFileUpload(由ServletFileUpload与DiskFileItemFactory合用代替)
处理文件上传的高级API。这个类可实现单HTML表单上传多文件的功能,只需使用符合RFC 1867的multipart/mixed作为encoding type即可对接该功能。使用arseRequest(HttpServletRequest)方法即可获取表示上传文件的FileItem列表。每个临时文件对象都会根据其大小来判断是存在内存还是存在硬盘的临时文件目录。
org.apache.commons.fileupload.FileUploadException
当解析数据包出现错误时会抛出此异常。
org.apache.commons.fileupload.InvalidFileNameException
当文件名出现空格字符时抛出该异常。
ONE FOR IT是一个呆萌CTO打理的资讯读物,每天只为你准备一篇IT行业新鲜资讯。互联网的前沿,一篇就够了。(ID:OFI)