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的官方网站逛逛,那里有很多非常好的开源项目
页:
[1]