JavaWeb之文件上传 (祥讲)

来源:互联网 发布:淘宝网商家客服 编辑:程序博客网 时间:2024/05/01 21:49

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

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:写上传的代码,等会讲

这里写图片描述
(四):介绍几个重要的类,开发类
具体的可以下载upload包,查看文档哦
这里写图片描述

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(“无文件上传”);}

(五):上传源码
篇幅有点长。放在下一篇,有分析

0 0