永发信息网

commons-fileupload-1.2.1.jar这个包是做什么用的

答案:1  悬赏:40  手机版
解决时间 2021-11-27 17:51
commons-fileupload-1.2.1.jar这个包是做什么用的
最佳答案
Apache的commons-fileupload.jar可方便的实现文件的上传功能




一、简单介绍
     使用最为广泛的Java文件上传组件,Struts本身采用这个包来处理文件上传。其基本原理:
 FileUpload组件将页面提交的所有元素(普通form表单域,如text和文件域file)都看作一样的FileItem,这样上传页面提交的 request请求也就是一个FileItem的有序组合,FileUpload组件可以解析该request,并返回一个一个的FileItem。而对每一个FileItem,FileUpload组件可以判断出它是普通form表单域还是文件file域,从而根据不同的类型,采取不同的操作--如果是表单域,就读出其值,如果是文件域,就保存文件到服务器硬盘上或者内存中。

二、介绍下 commons-FileUpload上传过程:
  首先要引入的.jar文件:
    commons-fileupload-1.2.1.jar
    commons-io-1.2.jar(此两个文件可以到官网:http://commons.apache.org/ (里面还会有帮助文档API)  下载)
   其次值得注意的是,凡是要上载文件的表单都必须设置enctype属性,且属性的值必须是multipart/form-data,同时请求方法必须是POST!!!!
1、检测request中是否包含有multipart内容(isMultipartContent(request)是它的一个静态方法)
ServletFileUpload.isMultipartContent(request)
 
2、如果有,生成DiskFileItemFactory工厂将进行相关的设置(不知道的情况下也可以不设置)
         DiskFileItemFactoryfactory = new DiskFileItemFactory();
        // maximum size that will bestored in memory
        factory.setSizeThreshold(4096);// 设置缓冲区大小,这里是4kb 
        // Location to save datathat is larger than maxMemSize.
        factory.setRepository(newFile("d:/"));// 设置临时目录 


        factory.setHeaderEncoding("UTF-8");//设置字符集 防止中文文件名乱码


3、生成上传ServletFileUpload类,并将DiskFileFactory工厂传给它,并对ServletFileUpload进行配置
       //Create a new file upload handler
        ServletFileUpload upload = newServletFileUpload(factory);
        upload.setFileSizeMax(3*1024*1024);//设置上传文件大小3M
        upload.setSizeMax(6*1024*1024);//设置请求总文件大小6M
4、从request得到上传的文件列表,并获得其迭代器
            //Parse the request to get file items.
            ListfileItems = upload.parseRequest(request);
            //Process the uploaded file items
            Iteratori = fileItems.iterator();
5、处理文件:写入或者其他操作
while(i.hasNext()) {
                FileItemfi = (FileItem) i.next();
                if(fi.isFormField()) {//当是表单域时,进行的处理
                    //Get the uploaded file parameters
                    StringfieldName = fi.getFieldName();//得到元素的name属性的值
                   StringfieldValue=fi.getString("utf-8");//得到元素的value的值
                    StringfileName = fi.getName();//这里是表单域,所以得到的是null
                   
                  
                    }else {//当是文件域时,将文件保存到硬盘中
                      StringbasePath = request.getRealPath("/upload");
                      StringcontentType = fi.getContentType();
                      booleanisInMemory = fi.isInMemory();
                      longsizeInBytes = fi.getSize();
                     StringfieldName = fi.getFieldName();//得到元素的name属
                      StringfileName = fi.getName();//取得上传的文件名
                        file= new File(basePath+"/"+filename);
                       fi.write(file);
                    }
                   
                    out.println("UploadedFilename: " + fileName + "
");
                }
            }
}
 
说明:
FileItem接口是对用户上传文件的封装
DiskFileItemFactory 实现了FileItemFactory接口,主要方法有public FileItemcreateItem(String fieldName, String contentType, boolean isFormField, StringfileName)
ServletFileUpload从FileUpload继承,而FileUpload又从FileUploadBase继承,功能:分析传入的request对象、得到文件列表FileItemIterator……
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
无牌车上路遭事于有临时排照的。谁的责任大
敬业签怎么实现电脑和手机同步便签?
圆周率π=3.1415926…,取近似值3.142,是精
创维37l02rm的hdmi无信号 先电视开启,在开ip
请问玩花式火机ZIPPO的怎么让打火机在手指旋
EMF的unbelievable的中文翻译????
〖求返图〗重制版萝莉蓝娃娃菜好看还是粉娃娃
吴怎么组词
宝健真的那么好吗?
为什么有些人特别喜欢打字的时候后面带三个逗
国行版的note8能不能再美国正常使用
龙卡信用卡换发新卡不?
嘻哈押韵词语,
=SUMIF($AP:$AP,$AU5,AQ:AQ) 这个公式?什么
沃尔克集团最新消息
推荐资讯
甲、乙两车同处在东西方向的平直公路上.若甲
真无聊的日语怎么说?要日常式的喔~
单选题郑成功收复台湾的时间是A.1652年B.1661
蜜蜂为什么会引路(短的)
初玩星月菩提,不知道买海南菩提好,还是印尼
天元术的解题方法
单选题NoneofushasbeentotheDisneylan
《稻草人》--《富翁》读后感应该怎么写?
铁路工程Ⅰ变更如何分类
由病毒引起的疾病是A.流感B.脚癣C.沙眼D.痢疾
单选题Thanks for your kind
单选题结合句意理解词语有误的一项是A.那些戴
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?