apache的FileUpLoad

我的FileUpload入门实例(超级简单)
      Commons是Apache开放源代码组织中的一个Java子项目,该项目主要涉及一些开发中常用的模块,例如文件上传、命令行处理、数据库连接池、XML配置文件处理等。这些项目集合了来自世界各地软件工程师的心血,其性能、稳定性等方面都经受得住实际应用的考验。Fileupload就是其中用来处理HTTP文件上传的子项目。下面介绍一下如何使用Fileupload来处理浏览器提交到服务器的文件信息。
环境配置
1.下载并安装Tomcat(注意配置环境变量,我这里使用的版本是Tomcat5.5)
2.到Apache的官方网站下载FileLoad的jar包,我这里用的版本是commons-fileupload-1.2.jar,下载地址:
   http://jakarta.apache.org/commons/fileupload/

文件上传页面
文件上传页面的代码如下。为了演示多文件上传,设计了三个文件域,同时上传三个文件。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>文件上传实例</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="40"
marginwidth="0" marginheight="0">
<center>
<h1>文件上传演示</h1>
<form name="uploadform" method="POST" action="uploadServlet"
ENCTYPE="multipart/form-data">
<table border="1" width="450" cellpadding="4" cellspacing="2"
bordercolor="#9BD7FF">
<tr>
  <td width="100%" colspan="2">文件一:<input name="file1" size="40"
   type="file"></td>
</tr>
<tr>
  <td width="100%" colspan="2">文件名2:<input name="file2" size="40"
   type="file"></td>
</tr>
<tr>
  <td width="100%" colspan="2">文件3:<input name="file3" size="40"
   type="file"></td>
</tr>
</table>
<br />
<br />
<table>
<tr>
  <td align="center"><input name="upload" type="submit"
   value="开始上传" /></td>
</tr>
</table>
</form>
</center>
</body>
</html>

处理上传文件信息
这里,将处理上传文件交给一个简单的Servlet(UploadServlet)来处理,代码如下:
package com.taobao.shenchong;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
/**
  * @author shenchong 2007-05-30
  */
private static final long serialVersionUID = 1L;
public void service(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  try {
   //这句很重要,解决了文件名乱码的问题
   request.setCharacterEncoding("utf-8");
   boolean isMultipart = ServletFileUpload.isMultipartContent(request);
   System.out.println(isMultipart);
   // Create a factory for disk-based file items
   FileItemFactory factory = new DiskFileItemFactory();
   // Create a new file upload handler
   ServletFileUpload upload = new ServletFileUpload(factory);
   // Parse the request
   List fileItems = null;
   try {
    fileItems = upload.parseRequest(request);
    String code = upload.getHeaderEncoding();
    System.out.println(code);
   } catch (FileUploadException e) {
    e.printStackTrace();
   }
   // 依次处理每个上传的文件
   Iterator i = fileItems.iterator();
   while (i.hasNext()) {
    FileItem item = (FileItem) i.next();
    // 忽略其他不是文件域的所有表单信息
    if (!item.isFormField()) {
     // 获取文件上传的客户端路径
     String name = item.getName();
     // 获取上传的文件名
     int j = name.lastIndexOf("\\");
     String filename = name.substring(j + 1, name.length());
     System.out.println(filename);
     // 获取表单的文件域的名称
     String fieldName = item.getFieldName();
     System.out.println(fieldName);
     // 获取上传文件的大小
     long size = item.getSize();
     System.out.println(Long.toString(size));
     if ((name == null || name.equals("")) && size == 0)
      continue;
     //设置文件上传目录,这里设为D:/temp
     File uploadedFile = new File("D:/temp/" + filename);
     try {
      //Upload
      item.write(uploadedFile);
     } catch (Exception e) {
      e.printStackTrace();
     }
    }
   }
   PrintWriter pw = response.getWriter();
   pw.println("<html>");
   pw.println("<head>");
   pw.println("</head>");
   pw.println("<body>");
   pw.println("<h3>文件上传成功!</h3>");
   pw.println("</body>");
   pw.println("</html>");
  } catch (Exception e) {
   PrintWriter pw = response.getWriter();
   pw.println("<html>");
   pw.println("<head>");
   pw.println("</head>");
   pw.println("<body>");
   pw.println("<h3>文件上传失败!</h3>");
   pw.println("</body>");
   pw.println("</html>");
   e.printStackTrace();
  }
}
}

在Web.xml中配置Servlet
写完Servlet之后,可别忘了在Web.xml中进行相关的设置,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
  <servlet-name>uploadServlet</servlet-name>
  <servlet-class>com.taobao.shenchong.UploadServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>uploadServlet</servlet-name>
  <url-pattern>/uploadServlet</url-pattern>
</servlet-mapping>
</web-app>

部署
现在,你可以把工程部署到Tomcat了,然后测试一下是否正确,另外FileUpload这个类里面还有许多方法这里没有提到,你可以通过查看API的方式了解,比如:设置缓存等方法等

后话
在我做这个实例的时候我碰到了上传文件中文名称乱码的问题,搞了一个上午才把编码问题搞明白,下次我会把一篇解决Java编码问题的文章帖出来,供朋友们参考。

PS:如果以上代码有什么问题,请给我留言,可能我有没想到的地方,大家一起交流
      如果有时间,请经常去Apache的官方网站逛逛,那里有很多非常好的开源项目

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值