利用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
- 浏览 2493
- 评论(6)
- 论坛回复 / 浏览 (6 / 12176)
- 查看更多
相关推荐
主要为大家详细介绍了使用fileupload实现文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Common-fileupload组件实现文件上传.pdfCommon-fileupload组件实现文件上传.pdfCommon-fileupload组件实现文件上传.pdfCommon-fileupload组件实现文件上传.pdfCommon-fileupload组件实现文件上传.pdfCommon-...
使用FileUpload组件实现上传功能,供大家一起共同分享学习。
Apache FileUpload文件上传组件API解析
利用Servlet来实现文件上传。 Upload.java package com.zj.sample; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.servlet....
源码 博文链接:https://lisanlai.iteye.com/blog/660238
jQuery Uploadify + Apache Fileupload异步上传文件示例
apache commons.fileupload上传组件在上传文件时,在调用parseRequest方法时,先将输入流上传到服务器临时目录,在之后的文件处理过程中,再将临时目录下保存的文件复制到指定的目录,多了一道转储步骤。本实现抽取...
采用apache commons 项目中的fileupload组件,实现了文件上传功能,它能够便利而简单地使得web应用程序和servlet具备高性能的文件上传能力,减小了直接操作输入输出流的系统开销。
apache fileupload 处理文件上传(流式和非流式)临时文件处理
commons-fileupload实现文件上传
Apache_Commons_fileUpload实现文件上传Apache_Commons_fileUpload实现文件上传
抽取了apache commons.fileupload的最基本代码,组合成一个简单的文件上传组件
我自己编写的jsp页面利用fileupload组建实现文件上传和下载,简单易懂。仅供初学者参考...
java_文件上传组件_Apache_Commons_FileUpload_应用指南
android上传文件服务器端和相关jar包(fileupload组件实现),对应前面的android客户端上传文件源码(上次忘记传了),可以一次上传多个文件http://download.csdn.net/source/3062714
文件上传的应用,asp.net中利用Fileupload实现的文件上传
使用commons-fileupload实现的文件上传和下载,上传和下载都没有中文乱码问题
primefaces中用<p:fileUpload组件来上传文件