`

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无法传递其他参数

    标题提到的“上传文件fileupload+解决enctype= multipart/form-data无法传递其他参数”是一个常见的技术挑战,特别是当使用HTML表单进行文件上传时。`multipart/form-data`是用于处理包含二进制数据(如文件)的表单...

    解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法 ?

    在探讨“解决当FORM的ENCTYPE='multipart/form-data'时request.getParameter()获取不到值的方法”这一主题时,我们首先需要理解为什么在特定情况下,传统的`request.getParameter()`方法无法正常工作,以及如何通过...

    解决java enctype multipart form-data文件上传传值问题

    ### 解决Java enctype "multipart/form-data" 文件上传传值问题 在Java Web开发中,处理文件上传是一项常见的任务。特别是当涉及到使用`multipart/form-data`作为表单的编码类型时,这种需求更为突出。本文将深入...

    java 页面上有ENCTYPE="multipart/form-data" 时action方法或者控制层用request.getParameter()获取不到值的方法 ?

    在Java Web开发中,我们经常遇到表单提交数据的情况,特别是涉及到文件上传时,`&lt;form&gt;`标签的`ENCTYPE`属性通常会被设置为`multipart/form-data`。这是因为`multipart/form-data`允许在请求中携带二进制数据,如...

    http post上传文件与表格 ContentType = multipart/form-data

    2. **安全性**:需防止文件上传攻击,如恶意文件注入,可以通过验证文件类型、大小以及进行文件重命名来提高安全性。 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页面上导入.xls文件报错问题

    在文件上传场景下,浏览器应当设置Content-Type为`multipart/form-data`,因为这种类型可以将表单数据分割成多个部分,每个部分都有自己的类型和编码方式,非常适合处理文件上传。 2. **MultipartParser和...

    Java中,当表单含有文件上传时,提交数据的如何读取(吐血版)

    - **依赖库**:处理`multipart/form-data`数据需要使用特定的库,如Apache Commons FileUpload和Apache Commons IO。添加以下Maven依赖: ```xml &lt;groupId&gt;commons-fileupload&lt;/groupId&gt; &lt;artifactId&gt;commons-...

    java ssh上传文件代码

    在实际应用中,需要注意文件大小限制、文件类型检查、防止路径遍历攻击等安全问题。此外,对于可能出现的文件上传异常,如文件过大、类型不符等,应有适当的异常处理机制。 6. **文件存储**: 文件上传后,可以...

    fileUpload组件所需jar包

    4. **安全与错误处理**:在处理文件上传时,需要考虑一些安全问题,例如防止文件覆盖、非法文件类型和大小限制。在`saveFile`方法中,应该对文件名进行安全过滤,并确保文件被保存到正确的位置。同时,捕获并处理...

    jsp文件上传下载通用包

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

    Fileupload测试demo

    - 然后,使用FileUpload库解析请求,获取`FileItem`对象,每个对象代表一个表单字段或上传文件。 - 对于每个`FileItem`,检查是否为文件(非表单字段)。如果是,可以将其写入硬盘或其他持久化存储。 - 最后,...

    commons-fileupload-1.3.3

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

    springMVC上传下载样例

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

    springMVC上传下载样例2

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

    java文件上传下载.pdf

    然后,在 doGet 方法中,我们使用 FileUpload.isMultipartContent 方法来判断表单的 enctype 属性值是否设置为 multipart/form-data。如果不是,则直接返回。否则,我们使用 DiskFileItemFactory 对象来设置缓冲区...

    jsp文件上传类 jsp文件上传类

    2. **Commons FileUpload库**:Apache Commons FileUpload是Java中处理文件上传的常用库,它提供了方便的API来解析`multipart/form-data`请求。我们需要在项目中引入这个库,通常通过Maven或Gradle添加依赖。 3. **...

    commons-fileupload使用例子

    Apache Commons FileUpload库解析这些`multipart/form-data`请求,并提供了一个简洁的API来处理上传的文件。 1. **添加依赖** 在项目中引入Apache Commons FileUpload和Commons IO库。如果你使用的是Maven,可以在...

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

    * getContentType():获取上传的文件类型,例如text/plain、image。如果是普通字段,则返回null。 * getSize():获取字段内容的大小,单位是字节。 * isFormField():判断是否是普通表单字段,若是,返回true,否则...

    commons-fileupload-1.2.1.jar

    - 多文件上传:支持同时上传多个文件,只需将它们作为`multipart/form-data`请求的一部分发送。 - 分块上传:通过配合其他技术,如Servlet 3.0的异步处理,可以实现大文件分块上传,提高上传性能。 6. **与其他库...

Global site tag (gtag.js) - Google Analytics