commom fileupload结构

一.概述

文件上传是网站非常常用的功能,直接使用Servlet获取上传文件还得解析请求参数,比较麻烦,所以一般选择采用apache的开源工具,common-fileupload.这个jar包可以再apache官网上面找到,也可以在struts的lib文件夹下面找到,struts上传的功能就是基于这个实现的。common-fileupload是依赖于common-io这个包的,所以还需要下载这个包。然后导入到你的项目路径下面

文件上传有许多中实现的方案:

  • 页面表单 + RFC1897规范 + http协议上传
  • 页面控件(flash/html5/activeX/applet) + RFC1897规范 + http协议上传
  • 页面控件(flash/html5/activeX/applet) + 自定义数据规范 + http协议上传
  • 页面控件(flash/html5/activeX/applet) + FTP协议上传
  • 页面控件(flash/html5/activeX/applet) + 自定义协议

  用apache common upload组件实际就是采用的“页面表单 + RFC1897规范 + http协议上传”实现方式,需要实现的技术点:

1. 多文件数据的提交

2. 文件数据包接收存储功能

3. 文件数据上传进度

4. WEB页面无刷新异步提交


二.上传过程

commom fileupload结构

三.common-fileupload类结构

commom fileupload结构

四.总结

虽然使用apache common upload组件实现了文件上传,但是从上传的效果来看,并不是一个很完美的解决方案。有如下缺点:
1. 当有多个文件上传时,无法知道单个文件的上传进度,因为文件上传消息中根本就没有关于单个文件大小的信息

2. 浏览器必须将所有文件读取完毕才开始上传,并且是一次性提交所有的数据文件,在互联网环境下,会http连接超时,大文件无法上传成功。

所以基于这些原因,页面表单 + RFC1897规范 + http协议上传 + 后台apache common upload组件接收的这种解决方案,不适合解决WEB页面一次多文件上传,大文件上传情况,比较适合一次单个小文件附件的情况,如:博客附件,登记照片上传,预览等情况。