`

multipart/form-data类型的form用fileupload包上传文件同时获取参数

阅读更多
今天遇到一个需求需要上传一个PDF文件同时用户输入待保存的文件名。按照平时的做法在负责处理的servlet中用request.getParameter()即可获得用户的输入。但是这么做那么在servlet中是无法获得到参数值的。查询了网上的解决方法,大部分都是针对struts的,有一个针对fileupload的解决方法也简要的说明处理流程。这里将在原来处理流程的基础上添加上处理代码。
1.下载uploadfile的jar包,这个不用说了,本来就是采用的uploadfile来处理文件上传的。地在地址:http://jakarta.apache.org/commons/fileupload/
2. Invoke parseRequest(request) on org.apache.commons.fileupload.FileUploadBase which returns list of org.apache.commons.fileupload.FileItem objects.
调用继承了FileUploadBase类的parseRequest(request)函数。这里我们采用ServletFileUpload类。但是ServletFileUpload的构造函数需要一个DiskFileItemFactory对象作为参数。parseRequest(request)方法返回一个FileItem的List因此这部分代码:
        DiskFileItemFactory dff = new DiskFileItemFactory();//创建该对象  
        dff.setRepository(tmpDir);//指定上传文件的临时目录  
        dff.setSizeThreshold(1024000);//指定在内存中缓存数据大小,单位为byte  
	ServletFileUpload sfu = new ServletFileUpload(dff);
	sfu.setFileSizeMax(5000000);//指定单个上传文件的最大尺寸  
        sfu.setSizeMax(10000000);//指定一次上传多个文件的总尺寸 
        List <FileItem>list = null;
		try {
			list = sfu.parseRequest(request);
		} catch (FileUploadException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} 

3. Invoke isFormField() on each of the FileItem objects. This determines whether the file item is a form paramater or stream of uploaded file.
调用FileItem的isFormField()方法,如果此FileItem为参数则返回true,反之为false。
4. Invoke getFieldName() to get parameter name and getString() to get parameter value on FileItem if it's a form parameter.
Invoke write(java.io.File) on FileItem to save the uploaded file stream to a file if the FileItem is not a form parameter.
getFieldName()方法返回获得parameter的名字(可以用来判断是否是需要的参数),getString()则用来获得此参数的值。
两部代码如下:
                Iterator ite = list.iterator();
		FileItem item = null;
		while (ite.hasNext())
		{
			item=(FileItem)ite.next();
			if(item.isFormField() || ((String)item.getFieldName()).equals("name"))
			{
				name = item.getString();
			}
		}
分享到:
评论

相关推荐

    上传文件fileupload+解决enctype= multipart/form-data无法传递其他参数

    解决上传文件enctype= multipart/form-data 时无法传递其他参数的问题,以及项目全局编码问题。用的插件是commons io + commons fileupload

    commons-fileupload-1.3.3

    commons-lang-2.3.jar,在使用组件实现文件上传时候要注意前后台的一致性,注意在后台定义File文件对象名要与jsp页面中的file标签name名字一致,前台form标签属性一定要设置为enctype="multipart/form-data",而且...

    jsp文件上传下载通用包

    当表单需要上传文件时,需指定表单 enctype 的值为 multipart/form-data 在 form 元素的语法中,enctype 属性指定将数据发送到服务器时浏览器使用的编码类型。 enctype 属性取值: application/x-...

    FileUpload+DWR 多文件上传实例

    原理: FileUpload实现上传功能, UploadListener 监听上传进度, DWR push (Reverse Ajax) 进度信息并更新页面, 实现无刷新多文件上传 运行环境: Tomcat 5/6 测试通过 说明:累计上传文件不超过10M(可以更改...

    springMVC上传下载样例

    为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器。 一旦设置了enctype为multipart/form-data,...

    springMVC上传下载样例2

    为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器。 一旦设置了enctype为multipart/form-data,...

    解决中文乱码的几种解决方法(推荐)

    1. 前台jsp中,我使用的是 form post 请求,设置了 enctype=”multipart/form-data” ,页面编码格式都是utf-8 2. 后台中,我使用的是commons-fileUpload组件,ServletFileUpload 解析form表单和文件, 3. 设置 ...

    php使用curl模拟浏览器表单上传文件或者图片的方法

    控件,form 表单需要设置 enctype=”multipart/form-data” 属性。比如: &lt;body&gt; &lt;form action=UploadFile.php method=post enctype=multipart/form-data&gt; &lt;input type=file name=fileUpload /&...

    JSP使用Common FileUpload组件实现文件上传及限制上传类型实例代码

    1、将commons-fileupload-1.3.3.jar复制到Web应用的lib文件夹下,在WebRoot目录下创建limit.jsp页面,在该页面中添加一个文件域的表单,设置类型为 multipart/form-data。代码如下: &lt;body&gt; 上传图书课件&lt;/...

    JSF自定义文件上传组件

    jsf官方实现默认是不支持multipart/form-data类型的表单的,为了使jsf能够解析multipart/form-data表单的数据,我参考了myfaces1.1的方式,然后按照commons-fileupload1.2重构了部分代码(myfaces1.1使用的是commons...

    DiskFileItemFactory需要的jar包commons-fileupload-1.3.jar和commons-io-1.2.jar

    解析multipart/form-data表单,使用DiskFileItemFactory ServletFileUpload 类需要的commons-fileupload-1.3.jar和commons-io-1.2.jar包

    struts2中的文件上传和下载

    2.其次JSP页面中的文件上传控件所在的form必须设置属性enctype="multipart/form-data" 3.再次,struts2中文件上传将底层高度封装了。在使用时只需要在ACTION中添加三个字段(其中 List&lt;File&gt; files为必填项),...

    文件上传组件FileUpload

    Apache组织提供的一个开源组件Commons-FileUpload,该组件可以方便的将“multipart/form-data”类型请求中的各种表单域解析出来,并实现一个或多个文件的上传,同时也可以限制上传文件的大小等内容。其性能十分优异,...

    fileupload组件上传文档介绍

    对文件上传功能,在浏览器端提供了较好的支持,只要将FORM表单的enctype属性设置为“multipart/form-data”即可;但在Web服务器端如何获取浏览器上传的文件,需要进行复杂的编程处理。为了简化和帮助Web开发人员接收...

    commons-fileupload1.2.jar commons-io-1.3.1.jar

    apahce上传组件所用到的包 上传步骤 1 导包 2 form表单上设置传输形式 enctype="multipart/form-data" 3 写处理类

    Servlet实现文件上传,可多文件上传示例

    一、Servlet实现文件上传,需要添加第三方提供的jar包 下载地址: 1) commons-fileupload-1.2.2-bin.zip: 点击打开链接 2) commons-io-2.3-bin.zip: 点击打开链接  接着把这两个jar包放到 lib文件夹下: 二:...

    servlet3.0文件上传 01.zip

    2、请不要使用360安全浏览器演示本功能,否则会出现如下异常:java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request ...

    android向struts服务器端上传文件代码

    能实现android客户端向struts上传文件功能,用的是HttpURLConnection,注意设置请求头的编码为“utf-8",能解决文件名是中文的问题,不然会报错,rg.apache.commons.fileupload.FileUploadBase$IOFileUploadException:...

    fileupload文件上传

    文件上传: 一,导包 1,commons-fileupload-1.2.2.jar 2,导入commons-io-2.0.1.jar 二,客户端 1,表单的method属性必须是post 2,必须包含name属性,如:...3,表单中加入属性:enctype="multipart/form-data

    servlet3.0实现文件上传——demo1.zip

    2、请不要使用360安全浏览器演示本功能,否则会出现如下异常:java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request ...

Global site tag (gtag.js) - Google Analytics