锁定老帖子 主题:fastupload API开发快速上手
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-09-01
fastupload提供两种从multipart/form-data表单请求数据中解析文件的方法,直接法和批量法
直接法:
是fastupload提供的第一种解析方法,从HttpServletRequest的InputStream中每次读取不超过8K的数据到缓冲区之中,从这个缓冲区里解析是否有文件,或者是文件的一部分数据,把每次解析的结果“直接 ”保存到磁盘文件中去。fastupload最先实现的是这种方式,这种方式一个好处就是对内存的占用非常小,解析内容的缓冲只有8K。因此非常适合那种 对内存要求很苛刻的应用场景,而且解析的速度也非常快,这里有几组比较数据,可以参考一下,http://mojarra.iteye.com/blog /1581521, http://mojarra.iteye.com/blog/1579986 具体的API使用如下
在解析文件之前,需要创建DiskFileFactory工厂,用来指定解析时用来的一些必要的“数据”,DiskFileFactory有三种构造函数, 第一种,创建DiskFileFactory工厂,文件保存在用户home目录下,使用jdk默认的文件编码,无文件大小限制 第二种,创建DiskFileFactory工厂,文件保存在用户home目录下,使用utf-8编码,无文件大小限制 第三种,创建DiskFileFactory工厂,文件保存在用户home目录下,使用utf-8编码,文件大小限制在0x20000
上面的列子中,第四行代码可以和这三个构造函数配合使用,来限制整个请求的数据 的大小,如果指定了整个请求数据的大小,即指定了ParseThreshold的值,类HttpFileUploadParser在解析文件之前,先和 HttpServletRequest的Content-Length相比较,如果发现ParseThreshold>Content- Length,直接抛出ThresholdException异常。
这里稍微提醒一下,因为HTTP协议的规定,HTTP请求的Content-Length会比上传文件的实际字节数稍微大一点。
上面代码的第五、六行,创建HttpFileUploadParser对象,并解析文件。如果指定了字符编码,解析过程中把文件名转换成所指定的字符编码,除此之外,若解析过程发现了文本文件,也会对文件的内容进行转码。
批量法: fastupload提供的第二种解析方式,是把 HttpServletRequest的InputStream中所有的数据都读取到一片大的缓冲区中(相对于第一种方式种所采用的8K缓冲区,不知道要 大多少倍的),再从这片大的缓冲区中,解析multipart/form-data数据中的文件或者其他输入内容。解析出来的数据通过 MultiPartData类中提供的一些API,让API使用者可以对这些数据进行操作。 因为是把HttpServletRequest的InputStream中所有的数据读入缓冲后,做一次解析的,所以批量法解析的速度是非常快的,比第一种要快3倍以上,因此,批量法非常适合那种对速度相应要快,不太介意内存使用、高并发上传小文件的场合。 这里与直接法有些不同,批量法除了支持解析文件外,还支持解析multipart/form-data中非文件的上传数据,比如表单中的文本输入框中用户手工的输入数据。
创建MemoryMultiPartDataFactory 与创建DiskFileFactory基本相同,只不过少了一个path参数,(确实,内存中的数据不需要path ),编码、文件大小限制,解析总长度与DiskFileFactory都起着一样的作用,这里不在复述。 经过httpMemoryUploadParser解析出的 multipart/form-data表单中的各部分内容,都会保存在一个包含MultiPartData对象的数组之中,API使用者可以 MultiPartData类封装的几个与上传内容重点相关的函数来访问解析的内容。
[暂时写这么多,欢迎大家提意见,我会继续完善] 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 1790 次