`
cjc
  • 浏览: 680728 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对commons fileupload组件的简单封装

阅读更多

对commons fileupload组件的简单封装

在上一篇文章《利用Jakarta commons fileupload组件实现多文件上传》中,我介绍了commons fileupload组件的基本原理和实现方法。但是在实际操作中,我们需要分析每个FileItem,然后从该FileItem中读取该控件的name和value,显然这不符合我们的习惯。比如我们在页面上有个text文本框:
<inputtype="text"name="possess">
我们要取得possess传过来的value,一般我们是这么写的:
Stringpossess=request.getParameter("possess")
但是在commons fileupload中我们却需要这么处理:
DiskFileItemFactoryfactory=newDiskFileItemFactory();
//Createanewfileuploadhandler
ServletFileUploadupload=newServletFileUpload(factory);
Stringpossess
="";
try...{
Listitems
=upload.parseRequest(request);
Iteratoriterator
=items.iterator();
while(iterator.hasNext())...{
FileItemitem
=(FileItem)iterator.next();
if(item.isFormField())...{
StringfieldName
=item.getFieldName();
Stringvalue
=item.getString();
if(fieldName.equals("possess"))...{
possess=value;
}

}

}

}
catch(FileUploadExceptione)...{
e.printStackTrace();
}
按照上面处理的话,很是不爽,因此我想包装一下,使得使用起来符合我们的习惯。
总体设计思想:
1.我们可以像以前那样,传入控件的name,就可以取得该控件的value,因此我想可以遍历所有FileItem,然后把他们存入一个Map中(key中存入fieldname,value中存入该控件的value),这样就可以达到以上目的了。
2.在该包装类中,我们还要可以设置一些值,从而我们可以更改commons fileupload中的一些配置。
具体实现:
根据以上要求,我写出了一个MutiFileUpload类,代码如下,稍后再做详细解释。
packagechb.commons.fileupload.web;

importjava.util.HashMap;

importjava.util.Iterator;

importjava.util.List;

importjava.util.Map;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;


importorg.apache.commons.fileupload.FileItem;

importorg.apache.commons.fileupload.FileUploadException;

importorg.apache.commons.fileupload.disk.DiskFileItemFactory;

importorg.apache.commons.fileupload.servlet.ServletFileUpload;



/***//**

*
@authorchb

*

*/


publicclassMutiFileUploadextendsHttpServlet...{

privatestaticfinallongserialVersionUID=670829239023754119L;



protectedMap<String,String>parameters;//保存普通form表单域

protectedMap<String,FileItem>files;//保存上传的文件



/***//**

*Thedirectoryinwhichuploadedfileswillbestored,ifstoredondisk.

*/


privateintsizeThreshold=DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD;



/***//**

*Themaximumsizepermittedforthecompleterequest,asopposedto

*{
@link#fileSizeMax}.Avalueof-1indicatesnomaximum.

*/


privatelongsizeMax=-1;



privateStringencoding="utf-8";//字符编码,当读取上传表单的各部分时会用到该encoding



publicStringgetEncoding()...{

returnencoding;

}


publicvoidsetEncoding(Stringencoding)...{

this.encoding=encoding;

}


publiclonggetSizeMax()...{

returnsizeMax;

}


publicvoidsetSizeMax(longsizeMax)...{

this.sizeMax=sizeMax;

}


publicintgetSizeThreshold()...{

returnsizeThreshold;

}


publicvoidsetSizeThreshold(intsizeThreshold)...{

this.sizeThreshold=sizeThreshold;

}


publicvoidparse(HttpServletRequestrequest)...{

parameters
=newHashMap<String,String>();

files
=newHashMap<String,FileItem>();

//Createafactoryfordisk-basedfileitems

DiskFileItemFactoryfactory
=newDiskFileItemFactory();



//Setfactoryconstraints

factory.setSizeThreshold(sizeThreshold);

//factory.setRepository(repository);



//Createanewfileuploadhandler

ServletFileUploadupload
=newServletFileUpload(factory);



//Setoverallrequestsizeconstraint

upload.setSizeMax(sizeMax);

upload.setHeaderEncoding(encoding);



try...{

Listitems
=upload.parseRequest(request);

Iteratoriterator
=items.iterator();

while(iterator.hasNext())...{

FileItemitem
=(FileItem)iterator.next();

if(item.isFormField())...{

StringfieldName
=item.getFieldName();

Stringvalue
=item.getString();

parameters.put(fieldName,value);

}
else...{

StringfieldName
=item.getFieldName();

files.put(fieldName,item);

}


}


}
catch(FileUploadExceptione)...{

e.printStackTrace();

}


}


/***//**得到上传文件的文件名

*
@paramitem

*
@return

*/


publicStringgetFileName(FileItemitem)...{

StringfileName
=item.getName();

fileName
=replace(fileName,"\","/");

fileName
=fileName.substring(fileName.lastIndexOf("/")+1);

returnfileName;

}


/***//**字符串替换

*
@paramsource

*
@paramoldString

*
@paramnewString

*
@return

*/


publicstaticStringreplace(Stringsource,StringoldString,StringnewString)...{

StringBufferoutput
=newStringBuffer();



intlengthOfSource=source.length();

intlengthOfOld=oldString.length();

intposStart=0;

intpos;



while((pos=source.indexOf(oldString,posStart))>=0)...{

output.append(source.substring(posStart,pos));

output.append(newString);

posStart
=pos+lengthOfOld;

}


if(posStart<lengthOfSource)...{

output.append(source.substring(posStart));

}


returnoutput.toString();

}




}



以上代码很简单,看过commons FileUpload组件API的程序员,应该都能看明白。值得注意一下的是:编码问题(setHeaderEncoding),这个方法是从FileUploadBase类里继承的,根据其说明,当读取上传表单的各部分时会用到该encoding,如果没有指定encoding则使用系统缺省的encoding。建议在这里设置成utf-8,并把jsp的charset也设置成utf-8,否则可能会出现乱码。
测试demo
好了,下面我就写个简单的demo吧,说明一下MutiFileUpload的用法。
1.新建一个jsp页面,注意设置form表单的enctype,如下:
<formid="form1"method="post"action="../servlet/UploadServlet"enctype="multipart/form-data">

<tr>
<tdwidth="25%"align="right">上传图片:</td>
<td>
<inputid="file1"type="file"NAME
分享到:
评论

相关推荐

    使用fileupload组件实现文件上传功能

    使用fileupload组件实现文件上传功能 FileUpload组件是Apache提供的一款文件上传组件,能够帮助我们轻松实现文件上传功能。下面我们将详细介绍使用FileUpload组件实现文件上传功能的步骤和要点: 首先,需要引入两...

    利用commons-fileupload上传组件上传文件(一)

    在本文中,我们将深入探讨如何使用Apache Commons FileUpload组件来实现文件上传功能。Apache Commons FileUpload是一个用于处理HTTP请求中的多部分数据的Java库,特别适用于处理文件上传。这个组件使得在Servlet或...

    commons-fileupload-1.2.2.jar.zip

    《Apache Commons FileUpload组件详解与应用实践》 Apache Commons FileUpload是Java开发中处理文件上传的一个强大工具,尤其在Web应用程序中,它提供了一种高效且灵活的方式来处理用户通过表单上传的文件。这个...

    Java 文件上传组件 Apache Commons FileUpload 应用指南

    以下是对 FileUpload 组件的详细解释及其应用指南: 1. **文件上传原理** - RFC1867 引入了在 HTML 表单中上传文件的功能,要求使用 `multipart/form-data` 编码类型。客户端浏览器在提交包含文件的表单时,会将...

    commons-fileupload文件上传实例

    本教程将详细介绍如何利用commons-fileupload实现文件上传功能,并提供一个简单的实例。 **一、Apache Commons FileUpload简介** Apache Commons FileUpload是Apache软件基金会开发的一个开源组件,专门处理HTTP...

    上传文件jar包commons-fileupload.jar和commons-io-2.6.jar

    在实际应用中,`commons-fileupload.jar`通常与`commons-io-2.6.jar`一起使用,因为FileUpload组件在处理文件上传时,可能会依赖于Commons IO库的一些功能,比如文件的读写操作。通过这两个库,开发者可以轻松地在...

    文件上传组件-Apache-Commons-FileUpload-应用指南.docx

    以下是对Apache Commons FileUpload组件的应用指南: 1. **获取上传组件**: - 首先,你需要访问Apache Commons FileUpload的官方网站(http://commons.apache.org/proper/commons-fileupload/)下载最新版本的...

    commons-fileupload-1.2.1-bin 和 commons-io-1.4-bin.zip

    4. 当用户提交表单时,Commons FileUpload会自动处理请求,将文件内容封装成FileItem对象。 5. 在Action类的execute方法中,通过HttpServletRequest的`getParts()`或`getInputStream()`方法获取FileItem对象,然后...

    commons组件包含了fileupload、io两个jar文件

    在你提到的“commons组件”中,主要包括了两个关键部分:`commons-fileupload`和`commons-io`。这两个组件在Java开发中扮演着重要角色,尤其是在处理文件上传和I/O操作时。 **1. Commons FileUpload** `commons-...

    commons-io,commons-fileupload-1.2.2

    `InputStreamReader` 和 `OutputStreamWriter` 的封装类使得在不同字符集之间转换变得简单。此外,`IOExceptions` 提供了一种方便的机制来处理可能抛出的异常,简化了错误处理代码。 Apache Commons FileUpload 则...

    commons-fileupload-1.2.1.jar和commons-io-2.0.jar

    `MultipartFile`是Spring MVC提供的接口,它封装了`commons-fileupload`解析出来的文件信息。 在实际应用中,为了处理上传的文件,你需要按照以下步骤进行: 1. 检查`MultipartFile`对象是否为空,以及文件大小和...

    commons 系列组件

    `FileItem`是FileUpload的核心类,它封装了单个上传项,无论是文本字段还是文件。通过`isFormField()`方法,我们可以判断该项是否为普通表单字段,如果不是,则可以调用`write()`方法将文件内容写入目标位置。此外,...

    common fileupload上传组件包

    这个包包含两个核心组件:`commons-io-1.4.jar`和`commons-fileupload-1.2.1.jar`。这两个组件在实现文件上传过程中扮演着至关重要的角色。 1. **Apache Commons IO** `commons-io-1.4.jar`是Apache Commons项目的...

    Smartupload_and_commons-fileupload.rar_smartupload

    在性能方面,由于SmartUpload的封装程度较高,对于简单的文件上传需求,它的使用更为便捷。然而,当涉及到复杂场景或者需要高度定制时,Commons FileUpload可能更有优势,因为它允许开发者深入到上传过程的每一个...

    commons-eamil和commons-fileupload包

    在你提到的“commons-eamil和commons-fileupload包”中,这两个组件是Apache Commons项目下的两个子模块,主要用于处理电子邮件和文件上传功能。 **Apache Commons Email** `commons-email`是一个用于创建和发送...

    文件上传组件-Apache-Commons-FileUpload-应用指南.pdf

    以下是对该组件的详细说明: 1. **组件获取与安装** 要使用Apache Commons FileUpload,首先需要从Apache官方网站下载最新版本的库文件。通常,你需要两个类库文件:`commons-fileupload-x.x.x.jar`和`commons-io-...

    commons-fileupload-1.3-bin.tar.gz

    Apache Commons FileUpload组件是Apache软件基金会 Commons项目的一部分,旨在为Java应用程序提供处理HTTP协议中的多部分(multipart)请求的能力。这个组件可以解析多部分数据,包括文件上传,并将每个部分转换为可...

    commons-fileupload-1.2-bin.tar.gz

    《Apache Commons FileUpload组件详解与应用实践》 Apache Commons FileUpload是Java开发中处理文件上传的一个强大工具,尤其在Web应用程序中,它提供了一种优雅、高效且易于使用的API来处理用户通过表单提交的多...

    commons上传jar组件

    FileUpload库则封装了这些细节,提供了一套简单易用的API,使得文件上传变得轻而易举。 使用Commons FileUpload库的步骤大致如下: 1. **依赖引入**:首先,你需要将Apache Commons FileUpload的JAR包添加到你的...

Global site tag (gtag.js) - Google Analytics