`

apache的FileUpLoad

    博客分类:
  • Java
阅读更多

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

 

分享到:
评论

相关推荐

    apache fileupload 文件上传实例

    本实例将深入讲解如何使用Apache FileUpload进行文件上传操作。 1. **Apache FileUpload简介** Apache Commons FileUpload是Apache软件基金会的一个子项目,它提供了处理HTTP请求中multipart/form-data类型的工具...

    jQuery Uploadify + Apache Fileupload异步上传文件示例

    本示例探讨了如何结合jQuery Uploadify插件与Apache Fileupload库来实现这一功能,主要面向Java后端开发。这里我们将深入讲解这两个组件的工作原理、集成过程以及关键知识点。 1. jQuery Uploadify 插件: jQuery ...

    apache fileupload处理文件上传(流式和非流式)

    Apache FileUpload是一个强大的Java库,专门用于处理HTTP协议中的文件上传功能。在Web应用中,尤其是在用户需要上传大文件时,FileUpload库提供了一种高效且灵活的方式来管理这些操作。它支持两种主要的工作模式:...

    用apache fileupload 实现基于http协议的断点续传,断点上载,含测试用的客户端

    Apache FileUpload是一个强大的Java库,专门用于处理HTTP请求中的多部分数据,比如文件上传。在传统的HTTP上传过程中,如果文件较大,用户可能会因为网络中断等原因导致上传失败,这时断点续传功能就显得尤为重要。...

    JSP上传文件Servlet(Apache fileUpload)同时text文本

    本教程将详细介绍如何使用JSP和Servlet结合Apache Commons FileUpload库实现文件上传,并同时处理text文本。 首先,我们需要在项目中引入Apache Commons FileUpload库。通常,这可以通过在pom.xml文件中添加依赖来...

    Apache Commons FileUpload jar

    Apache Commons FileUpload jar Apache Commons FileUpload jar Apache Commons FileUpload jar

    Apache Commons FileUpload 1.3.2 released

    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...

    Apache FileUpload的两种上传方式介绍及应用

    Traditional API是Apache FileUpload最基础的使用方式,适用于处理小型文件上传。以下是一个简单的示例: - **前端HTML表单**: ```html File to upload: &lt;input type="file" name="file" size="40"&gt;&lt;br/&gt; ...

    基于apache commons.fileupload的文件上传组件,改进了上传速度

    apache commons.fileupload上传组件在上传文件时,在调用parseRequest方法时,先将输入流上传到服务器临时目录,在之后的文件处理过程中,再将临时目录下保存的文件复制到指定的目录,多了一道转储步骤。本实现抽取...

    基于apache commons.fileupload的文件上传组件

    以下是一些关于Apache Commons FileUpload的关键知识点: 1. **多部分解析**:FileUpload库的核心功能是解析HTTP请求中的多部分数据。HTTP规范规定,文件上传通常通过“multipart/form-data”编码方式进行,...

    Apache Commons fileUpload实现文件上传

    1. 添加依赖:在项目中引入Apache Commons IO和FileUpload的JAR文件,或者在Maven或Gradle项目中添加对应的依赖。 2. 创建Servlet或控制器:设置请求的解析器,例如在Servlet中使用`ServletFileUpload`类。 3. ...

    FileUpload组件

    Apache组织作为开源社区的巨头之一,为开发者提供了一系列强大的工具,其中包括用于处理文件上传的组件——FileUpload。这个组件极大地简化了在Java Web应用中实现文件上传的过程。 FileUpload组件主要基于Servlet...

    apache的fileupload详解

    这篇博客文章深入讲解了如何使用Apache Commons FileUpload库来处理文件上传请求,以及相关的源码分析。 一、Apache Commons FileUpload简介 Apache Commons FileUpload是Apache软件基金会的一个开源项目,它提供了...

    Apache 文件上传

    本篇文章将深入探讨Apache FileUpload的工作原理和使用方法。 1. **多部分表单数据** HTTP协议的POST请求允许发送多部分数据,这种格式通常用于文件上传。每部分数据都包含一个头部和内容,头部定义了数据的类型和...

    FileUpload

    " 这句话表明FileUpload是Apache软件基金会的一个项目,它提供了方便的API,使得开发者能够轻松地在Apache服务器环境中实现文件上传功能。同时,为了获取最新、最稳定或具有新特性的版本,用户可以直接访问Apache...

    文件上传工具

    在本篇文章中,我们将重点讨论一个名为Apache FileUpload的Java库,它是实现文件上传的一种有效解决方案,尤其是在描述中提到的,它可以用作替代jspsmartupload的选项。 Apache FileUpload是Apache Commons项目的一...

    ApacheFileUpload案例

    Apache提供的FileUpload组件是实现这一功能的强大工具,尤其在处理大文件或多个文件上传时,它提供了灵活且高效的解决方案。这个案例将带你了解如何使用Apache FileUpload库来实现文件上传。 Apache FileUpload是...

Global site tag (gtag.js) - Google Analytics