Java 文件上传

在Java Web开发中,文件上传功能是经常用到的功能,当然网上相应的也有不少好的开发源组件,常用的比较多的的apache.common.fileupload,SmartUpload,cos.

当然这三个组件的功能基本上差不多,但某些方面还是有一些差别,现将三者对比如下:

对比项 是否一次加载到内存 上传方式 解析原理 应用场景  优缺点
 fileupload 根据设定,可一次将request流读取内存,然后从内存中抽取各文件部分。也可边读取流边解析保存文件到硬盘  可一次读入, 也可边保存边读取 RFC1867  文件较大,边解析边保存  
 smartupload  一次将request流读取内存,然后从内存中抽取各文件部分  一次全部读取文件到内存 RFC1867  文件比较小(100M以下),对内存要求不高  当文件较大时,容易内存溢出
 cos  根据设定,可一次将request流读取内存,然后从内存中抽取各文件部分。也可边读取流边解析保存文件到硬盘   可一次读入, 也可边保存边读取 RFC1867   文件较大,边解析边保存  

 当然,我平时用SmartUpload比较大,主要是因为上传的文件不是太大(小于100M),一般情况也可以满足业务要求.但如果要为SmartUpload也改造成像fileupload或cos一样可以边读取流,边保存文件,就需要修改SmartUpload 源文件中SmartUpload的upload方法,按照RFC1867协议规范,读取request流,根据分隔线抽取出form表单项和文件部分.然后将文件边读取边保存到硬盘上指定目录。具体代码可参考cos源码。(fileupload区分文件部分写的比较隐晦,本人看了一段时间还未能弄明白基分割文件原理,应该说跟cos差不多,按RFC1867协议解析)

posted @ 2013-04-07 14:04  moneyhacker  阅读(279)  评论(0编辑  收藏  举报