(一)引入:文件的上传不同与文本的上传,我们可以通过request.getInputStream()来收集表单的文件域,但是用户可能会同时上传多个文件,这样的话就使得表单手机文件域变得复杂了。为了方便用户处理上传的数据,Apache开源组织提供了一个免费的开源软件专门用来处理文件上传commons-fileupload的开源组件,所以我们来学习一下这个开源组件的使用
All开源组件下载:
(二)扩展:

1.使用commons-fileupload组件上传,需要导入相对应的支持jar包。commons-fileupload和commons-io。虽然commons-io不属于上传组建的开发jar包,但是在上传时需要改io包的支持。所以准备环境需要这两个jar包

//上面有下载
commons-fileupload和commons-io


2.上传文件的过程其实就是一个文本复制的过程,也就是IO->二进制
3:不同浏览器对上传文件的路径有些不同的解析,

//低版本的IE: 
 "c:\images\a.jpg"
 //高版本的浏览器:
 “a.jpg"

4:在form表单以MIME的协议去上传文件,通知服务器以二进制方式去读取
注意,也就是说如果你不通知的话,就不能使用该组建了。这时候采用普通方式request.getParameter()去获取表单数据就获取不到了

//在form 表单中添加enctype="multipart/form-data
<form action="#" method="post"  enctype="multipart/form-data">

(三):开发准备

//No1:导入相对应的jar包

//No2:设置form的MIME协议

//No3:写上传的代码,等会讲

开源 java ERP 开源 java 上传_java web


(四):介绍几个重要的类,开发类

具体的可以下载upload包,查看文档哦

开源 java ERP 开源 java 上传_上传_02

1: DiskFileItemFactory 是创建 FileItem 对象的工厂,这个工厂类常用方法:


            setSizeThreshold(int size Threshold) ; 设置缓冲区的大小,满了就刷出,也就是上传大文件时,可多次写入缓存区。单位是字节,如果要设置10k , size = 1024 * 10;
            setRepository(java.io.File repository):指定临时目录
            public DiskFileItemFactory(int sizeThreshold, java.io.File repository):构造函数

2:ServletFileUpload 负责处理上传的文件数据,并将表单中每个输入项封装成一个 FileItem 对象中。常用方法有

            boolean isMultipartContent(HttpServletRequest request) :判断上传表单是否为multipart/form-data类型
            List parseRequest(HttpServletRequest request):解析request对象,并把表单中的每一个输入项包装成一个fileItem 对象,并返回一个保存了所有FileItem的list集合。
            setFileSizeMax(long fileSizeMax) :设置上传文件的最大值(单位字节)
            setSizeMax(long sizeMax) :设置上传文件总量的最大值
            setHeaderEncoding(java.lang.String encoding) :设置编码格式,解决上传中文名文件的问题

3: fileItemList :上面经过parse方法之后返回就是fileItem集合:

            boolean isFormFiled() :判断是否为普通字段
            String getFileName() :获取表单的名字
            String getString():获取表单的内容
            String getString(“编码方式”):获取表单的内容,可以解决表单乱码问题。
            int getSize():获取文件大小。也就是判断是否为空。if(item.getSize()==0){out.write(“无文件上传”);}