YYW'S BLOG

知识的分享就是知识的获得
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 
      就在前段时间,还在苦于找到不到合适的上传组件,虽然很早就知道了 common-fileupload,但当时却因为没有找到如何获取表单参数的方法而使用 jspSmartUpload,历尽艰辛终于找到了它的 jar,可是使用后才发现此东西对中文参数支持奇差,甚至需要修改源代码才能解决问题,可是jspSmartUpload并不是开源的项目,而且开发团队也不再对它进行更新,连官方网站都关门大吉了,情急之下使用JadClipse 反编译了它的jar包,原以为问题算是得到解决了,谁知道后来却发现获取到的参数经常出现部分中文乱码,而且还不是固定的汉字出现乱码,仔细研究加Google后才找出了规律,原来是奇数字数的中文会出现乱码,而偶数字数的则正常,阅读了源代码,终于还是没耐心阅读下去,而且看到网上还有评论说该组件有内存泄露的问题,于是才下定决定搞定common-fileupload。

      于是从 http://jakarta.apache.org/commons/fileupload/ 下载到了最新版的 FileUpload 1.2,阅读了部分文档跟例子,终于找到了获取表单中参数的方法并对该组件做了进一点封装,使其更容易使用,并支持单文件上传和多文件上传两种方式,首先定义一个基类放置公共属性:

FileUploadBase.java 


支持单文件上传的 SingleFileUpload 类:
SingleFileUpload.java


支持多文件上传的 MutiFileUpload 类:
MutiFileUpload.java


当然还少不了过滤器 UploadFileFilter:
UploadFileFilter.java 


这样在 Servlet 中我们就可以通过简单的代码实现文件的上传了:


相比 jspSmartUpload 我觉得 common-fileupload  有如下的优点:
1、开源;
2、Jakarta项目组的支持,开发十分活跃,而 jspSmartUpload 则已经停止开发了;
3、不需要写入文件之前即可获取到参数和文件信息,jspSmartUpload 则需要在获取之前调用 upload 方法;
4、对中文支持友好。