今天遇到一个需求需要上传一个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无法传递其他参数”是一个常见的技术挑战,特别是当使用HTML表单进行文件上传时。`multipart/form-data`是用于处理包含二进制数据(如文件)的表单...
在探讨“解决当FORM的ENCTYPE='multipart/form-data'时request.getParameter()获取不到值的方法”这一主题时,我们首先需要理解为什么在特定情况下,传统的`request.getParameter()`方法无法正常工作,以及如何通过...
### 解决Java enctype "multipart/form-data" 文件上传传值问题 在Java Web开发中,处理文件上传是一项常见的任务。特别是当涉及到使用`multipart/form-data`作为表单的编码类型时,这种需求更为突出。本文将深入...
在Java Web开发中,我们经常遇到表单提交数据的情况,特别是涉及到文件上传时,`<form>`标签的`ENCTYPE`属性通常会被设置为`multipart/form-data`。这是因为`multipart/form-data`允许在请求中携带二进制数据,如...
2. **安全性**:需防止文件上传攻击,如恶意文件注入,可以通过验证文件类型、大小以及进行文件重命名来提高安全性。 3. **错误处理**:客户端和服务器端都需要处理上传失败的情况,例如网络中断、文件读取错误等。 ...
控件,form 表单需要设置 enctype=”multipart/form-data” 属性。比如: <body> <form action=UploadFile.php method=post enctype=multipart/form-data> <input type=file name=fileUpload /&...
在文件上传场景下,浏览器应当设置Content-Type为`multipart/form-data`,因为这种类型可以将表单数据分割成多个部分,每个部分都有自己的类型和编码方式,非常适合处理文件上传。 2. **MultipartParser和...
- **依赖库**:处理`multipart/form-data`数据需要使用特定的库,如Apache Commons FileUpload和Apache Commons IO。添加以下Maven依赖: ```xml <groupId>commons-fileupload</groupId> <artifactId>commons-...
在实际应用中,需要注意文件大小限制、文件类型检查、防止路径遍历攻击等安全问题。此外,对于可能出现的文件上传异常,如文件过大、类型不符等,应有适当的异常处理机制。 6. **文件存储**: 文件上传后,可以...
4. **安全与错误处理**:在处理文件上传时,需要考虑一些安全问题,例如防止文件覆盖、非法文件类型和大小限制。在`saveFile`方法中,应该对文件名进行安全过滤,并确保文件被保存到正确的位置。同时,捕获并处理...
当表单需要上传文件时,需指定表单 enctype 的值为 multipart/form-data 在 form 元素的语法中,enctype 属性指定将数据发送到服务器时浏览器使用的编码类型。 enctype 属性取值: application/x-...
- 然后,使用FileUpload库解析请求,获取`FileItem`对象,每个对象代表一个表单字段或上传文件。 - 对于每个`FileItem`,检查是否为文件(非表单字段)。如果是,可以将其写入硬盘或其他持久化存储。 - 最后,...
commons-lang-2.3.jar,在使用组件实现文件上传时候要注意前后台的一致性,注意在后台定义File文件对象名要与jsp页面中的file标签name名字一致,前台form标签属性一定要设置为enctype="multipart/form-data",而且...
为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器。 一旦设置了enctype为multipart/form-data,...
为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器。 一旦设置了enctype为multipart/form-data,...
然后,在 doGet 方法中,我们使用 FileUpload.isMultipartContent 方法来判断表单的 enctype 属性值是否设置为 multipart/form-data。如果不是,则直接返回。否则,我们使用 DiskFileItemFactory 对象来设置缓冲区...
2. **Commons FileUpload库**:Apache Commons FileUpload是Java中处理文件上传的常用库,它提供了方便的API来解析`multipart/form-data`请求。我们需要在项目中引入这个库,通常通过Maven或Gradle添加依赖。 3. **...
Apache Commons FileUpload库解析这些`multipart/form-data`请求,并提供了一个简洁的API来处理上传的文件。 1. **添加依赖** 在项目中引入Apache Commons FileUpload和Commons IO库。如果你使用的是Maven,可以在...
* getContentType():获取上传的文件类型,例如text/plain、image。如果是普通字段,则返回null。 * getSize():获取字段内容的大小,单位是字节。 * isFormField():判断是否是普通表单字段,若是,返回true,否则...
- 多文件上传:支持同时上传多个文件,只需将它们作为`multipart/form-data`请求的一部分发送。 - 分块上传:通过配合其他技术,如Servlet 3.0的异步处理,可以实现大文件分块上传,提高上传性能。 6. **与其他库...