今天遇到一个需求需要上传一个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();
}
}
分享到:
相关推荐
解决上传文件enctype= multipart/form-data 时无法传递其他参数的问题,以及项目全局编码问题。用的插件是commons io + commons fileupload
commons-lang-2.3.jar,在使用组件实现文件上传时候要注意前后台的一致性,注意在后台定义File文件对象名要与jsp页面中的file标签name名字一致,前台form标签属性一定要设置为enctype="multipart/form-data",而且...
当表单需要上传文件时,需指定表单 enctype 的值为 multipart/form-data 在 form 元素的语法中,enctype 属性指定将数据发送到服务器时浏览器使用的编码类型。 enctype 属性取值: application/x-...
原理: FileUpload实现上传功能, UploadListener 监听上传进度, DWR push (Reverse Ajax) 进度信息并更新页面, 实现无刷新多文件上传 运行环境: Tomcat 5/6 测试通过 说明:累计上传文件不超过10M(可以更改...
为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器。 一旦设置了enctype为multipart/form-data,...
为了能上传文件,必须将表单的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. 设置 ...
控件,form 表单需要设置 enctype=”multipart/form-data” 属性。比如: <body> <form action=UploadFile.php method=post enctype=multipart/form-data> <input type=file name=fileUpload /&...
1、将commons-fileupload-1.3.3.jar复制到Web应用的lib文件夹下,在WebRoot目录下创建limit.jsp页面,在该页面中添加一个文件域的表单,设置类型为 multipart/form-data。代码如下: <body> 上传图书课件</...
jsf官方实现默认是不支持multipart/form-data类型的表单的,为了使jsf能够解析multipart/form-data表单的数据,我参考了myfaces1.1的方式,然后按照commons-fileupload1.2重构了部分代码(myfaces1.1使用的是commons...
解析multipart/form-data表单,使用DiskFileItemFactory ServletFileUpload 类需要的commons-fileupload-1.3.jar和commons-io-1.2.jar包
2.其次JSP页面中的文件上传控件所在的form必须设置属性enctype="multipart/form-data" 3.再次,struts2中文件上传将底层高度封装了。在使用时只需要在ACTION中添加三个字段(其中 List<File> files为必填项),...
Apache组织提供的一个开源组件Commons-FileUpload,该组件可以方便的将“multipart/form-data”类型请求中的各种表单域解析出来,并实现一个或多个文件的上传,同时也可以限制上传文件的大小等内容。其性能十分优异,...
对文件上传功能,在浏览器端提供了较好的支持,只要将FORM表单的enctype属性设置为“multipart/form-data”即可;但在Web服务器端如何获取浏览器上传的文件,需要进行复杂的编程处理。为了简化和帮助Web开发人员接收...
apahce上传组件所用到的包 上传步骤 1 导包 2 form表单上设置传输形式 enctype="multipart/form-data" 3 写处理类
一、Servlet实现文件上传,需要添加第三方提供的jar包 下载地址: 1) commons-fileupload-1.2.2-bin.zip: 点击打开链接 2) commons-io-2.3-bin.zip: 点击打开链接 接着把这两个jar包放到 lib文件夹下: 二:...
2、请不要使用360安全浏览器演示本功能,否则会出现如下异常:java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request ...
能实现android客户端向struts上传文件功能,用的是HttpURLConnection,注意设置请求头的编码为“utf-8",能解决文件名是中文的问题,不然会报错,rg.apache.commons.fileupload.FileUploadBase$IOFileUploadException:...
文件上传: 一,导包 1,commons-fileupload-1.2.2.jar 2,导入commons-io-2.0.1.jar 二,客户端 1,表单的method属性必须是post 2,必须包含name属性,如:...3,表单中加入属性:enctype="multipart/form-data
2、请不要使用360安全浏览器演示本功能,否则会出现如下异常:java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request ...