利用apache的FileUpload组件实现文件上传Java认证考试

文章作者 100test 发表时间 2009:04:10 00:45:48
来源 100Test.Com百考试题网


  1、可以实现一个或多个文件的上传,也可以接收普通的form表单数据。
  2、简单测试了一下,对内存的占用还是可以忍受的,而且速度也可以。偶尔会导致内存使用的上升而且不会下降,长时间后是否会降下来还没有测试。
  关键点:
  1、提交文件上传的form的method属性为post,enctype属性为multipart/form-data。
  2、input标签需要有name属性,否则取不到内容。
  看看servlet的实现,注释已经很详细了:
  Java代码
  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.
  /** 以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为基础来写得,具体情况需要修改。
  更多优质资料尽在百考试题论坛 百考试题在线题库 java认证更多详细资料

相关文章


JAVA认证:向Web开发进军Eclipse发展浅析Java认证考试
JAVA资格认:java正则表达式匹配斜杠Java认证考试
利用apache的FileUpload组件实现文件上传Java认证考试
JSP动态网站环境搭建应用中详细步骤介绍Java认证考试
实例说明如何集成Spring和StrutsJava认证考试
JAVA资格认证:HibernateTemplate类使用Java认证考试
JAVA资格认证:hibernate的性能优化Java认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛