- 浏览: 134935 次
- 性别:
- 来自: 石家庄
文章分类
最新评论
-
shuzheng5201314:
如果不管这样的错误有影响吗?你这样貌似可行!
Proxool连接池在reload web容器时出现HouseKeeper的空指针异常 -
SpreadDiaries:
...
[转]常见数据库字段类型与java.sql.Types的对应 -
kevinhrw:
<bean
class="org.spri ...
用BeanNameAutoProxyCreator自动创建事务代理 -
hilliate:
第一步,把冰箱门打开第二步,把大象装进去第三步,把冰箱门关上呵 ...
Struts2中实现自定义标签很简单,主要分为3步:
我的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的官方网站逛逛,那里有很多非常好的开源项目
发表评论
-
truelicense使用手册
2015-04-25 09:47 39201.生成truelicense的maven项目 mvn a ... -
Java实现ftp上传文件、文件夹
2012-04-06 11:06 841import java.io.File; import ... -
Lucene入门级笔记六 -- 优化 .
2011-10-24 22:54 0Lucene 优化 1. 让程序中只有一个 Inde ... -
Lucene入门级笔记五 -- 分词器,使用中文分词器,扩展词库,停用词 .
2011-10-24 22:53 14071. 常见的中文分词器有 ... -
Lucene(全文检索技术)入门级笔记整之一——第一个Lucene程序 .
2011-10-24 22:50 1242Lucene(全文检索技术)入门级笔记整之一——第一个Lu ... -
Lucene入门级笔记二 -- 索引库的CRUD API 演示 .
2011-10-24 22:44 1081Lucene 对索引库的增删改查操作的 API 演示 没什么 ... -
Lucene入门级笔记三 -- 给关键词添加高亮效果
2011-10-24 22:43 17231. 使用高亮器。 2. ... -
Lucene入门级笔记四 -- 对检索结果排序 .
2011-10-24 22:40 1553对检索结果排序 1. 某些场合需要我们自定义搜索结果的 ... -
java获取各种日期
2011-07-14 16:47 829package com.cjy.test; impo ... -
tomcat无法运行两个struts2项目。解决方式
2011-06-15 14:22 1028提示异常: 严重: Exception starting f ... -
APACHE 2.2.9+TOMCAT6.0.18配置负载均衡
2010-10-21 23:14 1467目标: 使用 apache 和 tomcat 配置一个可以应 ... -
Request用法
2010-09-08 11:13 1186Request [JSP] JSP中的隐藏对象 -- ... -
div错位/解决IE6、IE7、IE8样式不兼容问题
2010-01-13 10:07 2300IE6里DIV错位的问题 ... -
主题:J2EE常用工具类汇总
2009-10-18 18:24 853J2EE常用工具类汇总 J2EE ... -
dreamweaver cs4 许可证过期的解决办法
2009-09-24 13:43 1856dreamweaver cs4 许可证过期的解决办法 200 ... -
lucene四种索引方式详解
2009-09-16 21:45 11721。今天研究了一下lucene,对于初学者来说,有一个地方以前 ... -
时间处理类
2009-07-24 10:14 769/** * 时间处理类 */ ... -
apache POI 读取 Word
2009-07-24 10:13 1314import java.io.File; import ... -
apache POI 读取 Excel
2009-07-24 10:12 1227import java.io.File; import ja ... -
自动得到汉语拼音
2009-07-24 10:11 961import java.util.Iterator; imp ...
相关推荐
本实例将深入讲解如何使用Apache FileUpload进行文件上传操作。 1. **Apache FileUpload简介** Apache Commons FileUpload是Apache软件基金会的一个子项目,它提供了处理HTTP请求中multipart/form-data类型的工具...
本示例探讨了如何结合jQuery Uploadify插件与Apache Fileupload库来实现这一功能,主要面向Java后端开发。这里我们将深入讲解这两个组件的工作原理、集成过程以及关键知识点。 1. jQuery Uploadify 插件: jQuery ...
Apache FileUpload是一个强大的Java库,专门用于处理HTTP协议中的文件上传功能。在Web应用中,尤其是在用户需要上传大文件时,FileUpload库提供了一种高效且灵活的方式来管理这些操作。它支持两种主要的工作模式:...
Apache FileUpload是一个强大的Java库,专门用于处理HTTP请求中的多部分数据,比如文件上传。在传统的HTTP上传过程中,如果文件较大,用户可能会因为网络中断等原因导致上传失败,这时断点续传功能就显得尤为重要。...
本教程将详细介绍如何使用JSP和Servlet结合Apache Commons FileUpload库实现文件上传,并同时处理text文本。 首先,我们需要在项目中引入Apache Commons FileUpload库。通常,这可以通过在pom.xml文件中添加依赖来...
Apache Commons FileUpload jar Apache Commons FileUpload jar Apache Commons FileUpload jar
The Apache Commons FileUpload component provides a simple yet flexible means of adding support for multipart file upload functionality to servlets and web applications. Changes in this release are: o...
Traditional API是Apache FileUpload最基础的使用方式,适用于处理小型文件上传。以下是一个简单的示例: - **前端HTML表单**: ```html File to upload: <input type="file" name="file" size="40"><br/> ...
apache commons.fileupload上传组件在上传文件时,在调用parseRequest方法时,先将输入流上传到服务器临时目录,在之后的文件处理过程中,再将临时目录下保存的文件复制到指定的目录,多了一道转储步骤。本实现抽取...
以下是一些关于Apache Commons FileUpload的关键知识点: 1. **多部分解析**:FileUpload库的核心功能是解析HTTP请求中的多部分数据。HTTP规范规定,文件上传通常通过“multipart/form-data”编码方式进行,...
1. 添加依赖:在项目中引入Apache Commons IO和FileUpload的JAR文件,或者在Maven或Gradle项目中添加对应的依赖。 2. 创建Servlet或控制器:设置请求的解析器,例如在Servlet中使用`ServletFileUpload`类。 3. ...
Apache组织作为开源社区的巨头之一,为开发者提供了一系列强大的工具,其中包括用于处理文件上传的组件——FileUpload。这个组件极大地简化了在Java Web应用中实现文件上传的过程。 FileUpload组件主要基于Servlet...
这篇博客文章深入讲解了如何使用Apache Commons FileUpload库来处理文件上传请求,以及相关的源码分析。 一、Apache Commons FileUpload简介 Apache Commons FileUpload是Apache软件基金会的一个开源项目,它提供了...
本篇文章将深入探讨Apache FileUpload的工作原理和使用方法。 1. **多部分表单数据** HTTP协议的POST请求允许发送多部分数据,这种格式通常用于文件上传。每部分数据都包含一个头部和内容,头部定义了数据的类型和...
" 这句话表明FileUpload是Apache软件基金会的一个项目,它提供了方便的API,使得开发者能够轻松地在Apache服务器环境中实现文件上传功能。同时,为了获取最新、最稳定或具有新特性的版本,用户可以直接访问Apache...
在本篇文章中,我们将重点讨论一个名为Apache FileUpload的Java库,它是实现文件上传的一种有效解决方案,尤其是在描述中提到的,它可以用作替代jspsmartupload的选项。 Apache FileUpload是Apache Commons项目的一...
Apache提供的FileUpload组件是实现这一功能的强大工具,尤其在处理大文件或多个文件上传时,它提供了灵活且高效的解决方案。这个案例将带你了解如何使用Apache FileUpload库来实现文件上传。 Apache FileUpload是...