当前位置:问百问>百科知识>commons-fileupload-1.2.1.jar这个包是做什么用的

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

2024-09-05 12:45:44 编辑:zane 浏览量:528

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

的有关信息介绍如下:

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.

            List<FileItem>fileItems = 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 + "<br>");

                }

            }

}

 

说明:

FileItem接口是对用户上传文件的封装

DiskFileItemFactory 实现了FileItemFactory接口,主要方法有public FileItemcreateItem(String fieldName, String contentType, boolean isFormField, StringfileName)

ServletFileUpload从FileUpload继承,而FileUpload又从FileUploadBase继承,功能:分析传入的request对象、得到文件列表FileItemIterator……

版权声明:文章由 问百问 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.wenbwen.com/article/151655.html
热门文章