利用apache的fileupload组件实现文件的上传
1、可以实现一个或多个文件的上传,也可以接收普通的form表单数据。
2、简单测试了一下,对内存的占用还是可以忍受的,而且速度也可以。偶尔会导致内存使用的上升而且不会下降,长时间后是否会降下来还没有测试。
关键点:
1、提交文件上传的form的method属性为post,enctype属性为multipart/form-data。
2、input标签需要有name属性,否则取不到内容。
看看servlet的实现,注释已经很详细了:
package org.xxm;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dareway.org.apache.commons.fileupload.FileItem;
import dareway.org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import dareway.org.apache.commons.fileupload.disk.DiskFileItemFactory;
import dareway.org.apache.commons.fileupload.servlet.ServletFileUpload;
import dareway.org.apache.commons.fileupload.util.Streams;
/**
* @author xuxiaoming
* 2009-03-19
* 以tomcat6.0为服务器
*/
public class UploadFileServlet extends HttpServlet {
public void doGet(HttpServletRequest req,
HttpServletResponse res) {
return;
}
public void doPost(HttpServletRequest req,
HttpServletResponse res) throws IOException {
/**
* form中的enctype必须是multipart/...
* 组件提供方法检测form表单的enctype属性
* 在isMultipartContent方法中同时检测了是否是post提交
* 如果不是post提交则返回false
*/
if(ServletFileUpload.isMultipartContent(req)) {
req.setCharacterEncoding("utf-8");
DiskFileItemFactory factory = new DiskFileItemFactory();
/**
* 临时文件存储路径要真实存在
*/
factory.setRepository(new File("../webapps/fileupload/tmp"));
//内存最大占用
factory.setSizeThreshold(1024000);
ServletFileUpload sfu = new ServletFileUpload(factory);
//单个文件最大值byte
sfu.setFileSizeMax(102400000);
//所有上传文件的总和最大值byte
sfu.setSizeMax(204800000);
List items = null;
try {
items = sfu.parseRequest(req);
} catch (SizeLimitExceededException e) {
System.out.println("size limit exception!");
} catch(Exception e) {
e.printStackTrace();
}
Iterator iter = items==null?null:items.iterator();
while(iter != null && iter.hasNext()) {
FileItem item = (FileItem)iter.next();
//简单的表单域
if(item.isFormField()) {
System.out.print("form field:");
System.out.print(item.getFieldName() + " ");
System.out.print(item.getString());
}
//文件域
else if(!item.isFormField()) {
System.out.println("client name:" + item.getName());
String fileName = item.getName().substring(item.getName().lastIndexOf("\\"));
BufferedInputStream in = new BufferedInputStream(item.getInputStream());
//文件存储在工程的upload目录下,这个目录也得存在
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(new File("../webapps/fileupload/upload/" + fileName)));
Streams.copy(in, out, true);
}
}
} else {
System.out.println("enctype error!");
}
}
}
因为使用tomcat做得服务器,所以里面的路径都是以tomcat为基础来写得,具体情况需要修改。
附件是一个做好的例子,可以直接部署。
下次会以这个为基础搞一个ajax式的文件上传。
分享到:
- 2009-03-23 21:00
- 浏览 2534
- 评论(6)
- 论坛回复 / 浏览 (6 / 12203)
- 查看更多
相关推荐
通过以上步骤,我们就使用Apache Commons FileUpload组件实现了一个基本的文件上传功能。你可以根据自己的需求对这个示例进行扩展,比如添加错误处理、文件类型检查和存储优化等。参考提供的博文链接,可以获取更多...
本篇文章将详细介绍如何利用Common-fileupload组件在JSP环境中实现文件上传功能。 #### 二、Common-fileupload组件介绍 Common-fileupload组件是由Apache开发维护的一个轻量级Java库,用于处理HTTP文件上传请求。...
在本文中,我们将深入探讨如何使用Apache Commons FileUpload组件来实现文件上传功能。Apache Commons FileUpload是一个用于处理HTTP请求中的多部分数据的Java库,它使得在Servlet或JSP应用中处理文件上传变得简单易...
在使用 Apache Commons FileUpload 进行文件上传之前,你需要确保以下组件已经准备就绪: 1. **引入依赖**:首先,你需要下载并添加 `org.apache.commons.io` 和 `log4j` 的 JAR 包到你的项目类路径中。在本例中,`...
首先,我们来看一下标题:“利用Common-fileupload封装的文件上传组件...附上源码”。这表明我们将讨论如何使用这个库来创建一个文件上传系统,并且提供有源码可供参考。通过`Common-fileupload`,我们可以实现用户...
本教程将详细介绍如何利用commons-fileupload实现文件上传功能,并提供一个简单的实例。 **一、Apache Commons FileUpload简介** Apache Commons FileUpload是Apache软件基金会开发的一个开源组件,专门处理HTTP...
Commons-FileUpload 是 Apache 提供的一个用于处理 HTTP 文件上传的组件。它基于 Servlet 规范,并且能够解析来自 `multipart/form-data` 编码类型的 HTTP 请求。本文将详细介绍如何使用 Commons-FileUpload 实现...
在现代的Web开发中,上传文件到服务器是一项常见的需求。当上传的文件体积较大时,就涉及到一系列的...使用FileUpload组件实现的文件上传功能已经成功应用于多个项目中,证明了其在处理大文件上传时的稳定性和可靠性。
这个组件利用了Flash技术,可以在不刷新页面的情况下实现文件上传,提供了良好的用户体验。在本教程中,我们将深入探讨如何使用SwfUpload与`org.apache.commons.fileupload`库来实现文件上传功能。 Apache Commons ...
在Java Web开发中,文件上传是一项常见的功能,Apache Commons FileUpload和Smart Upload是两个常用的文件上传组件。这里我们将深入探讨这两个库以及如何在实际项目中使用它们。 首先,Apache Commons FileUpload是...
"FileUpload上传组件"是一个专为Java Web开发者设计的强大工具,用于处理用户通过网页上传文件的需求。在JSP(JavaServer Pages)环境中,...通过合理利用这个组件,我们可以构建出功能强大且用户友好的文件上传功能。
FileUpload组件是Apache Commons项目中的一个模块,主要处理HTTP协议中的文件上传功能。在Web开发中,用户可能需要上传图片、文档等文件,FileUpload组件提供了便捷的API,使得开发者可以轻松地处理这些复杂的文件...
本篇文章将深入探讨Apache Commons FileUpload组件的使用,以及在Java Web环境中如何进行文件上传。 首先,Apache Commons FileUpload组件是一个专门处理HTTP请求中的多部分/形式数据(通常用于文件上传)的库。它...
总的来说,"fileupload组件"结合Apache Commons IO和FileUpload,为Java Web开发提供了强大的文件上传解决方案。这两个库不仅提供了基本的文件操作功能,还解决了文件上传过程中的许多实际问题,简化了开发者的工作...
在Java Web开发中,文件上传是一项常见的功能,用于允许用户将本地文件传输到服务器。为了实现这个功能,开发者通常...在实际项目中,确保正确引用并合理利用这两个库,可以极大地提升文件上传功能的用户体验和稳定性。
总的来说,Apache Commons IO库和其FileUpload组件是Java开发中处理文件上传的得力助手,它们提供了丰富的功能和高度的灵活性,使得文件上传操作变得简单易行。无论是在小型项目还是大型应用中,都值得我们去掌握和...
`commons-fileupload`组件是Apache Commons项目中的一个子项目,主要负责处理HTTP协议下的文件上传功能。在Web应用中,用户可能需要上传图片、文档等文件,这时`commons-fileupload`就发挥了重要作用。本篇文章将...
通过本文介绍的方法,我们可以有效地利用Apache Commons FileUpload组件实现在Java Web应用中的文件上传功能。相比于Smartupload等早期组件,Apache Commons FileUpload提供了更为强大的文件处理能力,并且拥有活跃...