`

使用Servlet进行文件上传操作

    博客分类:
  • web
 
阅读更多


     使用Servlet做文件上传,当然,底层的工作还是有开源的框架,即便如此,也着实耗费了我一些功夫。下面开始进行讲解,文件上传功能是Java在Web应用中常用的功能之一,也是程序员必回的一项技能。

    首先,我要使用到apache的一个开源jar包,为file-upload.jar,这个jar包封装了对用户上传的文件的操作,同时该jar包需要依赖common-io.jar,commons-io.jar封装了一些对文件底层的操作,具体原理我也没有研究,有兴趣的自己去apache官方下载研究。

    再说下文件上传需要的java类,主要使用到了org.apache.commons.fileupload.disk包中的DiskFileItemFactory类(主要供实例化文件上传高层API实例化使用)和DiskFileItem类(判断表单中的提交的元素是否为文件类型,若是,则进行写入到磁盘操作(需要程序员手动去写))。

    首先,开始进行实际操作,新建一个web工程,工程目录结构如下图所示:

    第一步,写界面:fileUpload.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>fileUpload</title>
  </head>
 
  <body>
    <h3>文件上传Demo</h3>
    <form action="fileUploadloadServlet" method="post" enctype="multipart/form-data">
     名字:<input type="text" name="name"><br>
     file1:<input type="file" name="file1"><br>
     file2:<input type="file" name="file2"><br/>
     <input type="submit" value="提交">
    </form>

 

fileUploadSucces.jsp:

<%@ page language="java" import="java.util.*" isELIgnored="false" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>文件上传成功</title>
  </head>  
  <body>
    名字:${requestScope.name }<br/>
    file1:${requestScope.file1 }<br/>
    file2:${requestScope.file2 }    
  </body>
</html>
  </body>
</html>

第二步:新建一个Servlet,名字为FileUploadloadServlet.java,代码如下

import java.io.File;
import java.io.IOException;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * 使用Servlet进行文件上传Demo
 *
 * @author XiaoYun 2013-07-22
 */
public class FileUploadloadServlet extends HttpServlet {

 /**
  *
  */
 private static final long serialVersionUID = 2818543291976552632L;

 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  req.setCharacterEncoding("UTF-8");
  resp.setContentType("text/html;charset=utf-8");
  String path = this.getServletConfig().getServletContext().getRealPath("/upload");
  System.out.println(path);
  // 创建磁盘文件工厂
  DiskFileItemFactory factory = new DiskFileItemFactory();
  
  // 设置超出文件默认大小后文件存放在硬盘上的位置
  factory.setRepository(new File(path));  
  
  // 实例化封装文件上传的高层API
  ServletFileUpload upload = new ServletFileUpload(factory);
  
  try {
   // 从request中获取文件
   List<FileItem> items = upload.parseRequest(req);
   for (FileItem fileItem : items) {

     // 获取输入框或表单的名字
     String name = fileItem.getFieldName();
    if (fileItem.isFormField()) { // 判断是否是为简单的表单类型
     String value = fileItem.getString();          
     req.setAttribute(name, value);
    } else { // 是文件类型
     // 同时可以进行多文件上传
     // 获取上传的文件名
     String fileName = fileItem.getName();
     fileName = fileName.substring(fileName.indexOf("\\") + 1);
     req.setAttribute(name, fileName);
     fileItem.write(new File(path, fileName));
    }
   }
   req.getRequestDispatcher("fileUploadSuccess.jsp").forward(req, resp);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

第三部:编写配置文件web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>FileUploadloadServlet</servlet-name>
    <servlet-class>com.servlet.upload.FileUploadloadServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>FileUploadloadServlet</servlet-name>
    <url-pattern>/fileUploadloadServlet</url-pattern>
  </servlet-mapping>
</web-app>
第四步,也是很多人都容易忽略的一步(如果你想把文件上传到当前工程的目录下的话),系统默认是上传到tomcat的部署工程目录下。  打开tomcat安装目录\conf\server.xml,在</Host>前面加上<Context path="/fileUpload(你的工程名字)" docBase="D:\Workspaces\study\fileUpload\WebRoot(你的WebRoot目录的绝对路径)" reloadable="true"/>

      </Host>

    好,这样一个Demo就写完了,启动tomcat(我的版本是5.5),就可以进行文件操作了,在我机器上试过了,可以跑通没有问题。

    通过这样一个例子,总结下文件上传在servlet中的处理过程:

    1. 实例化文件条目工厂  DiskFileItemFactory factory = new DiskFileItemFactory();

    2. 实例化封装文件上传方法的高层API, ServletFileUpload upload = new ServletFileUpload(factory);

    3. 获取要上传的位置path(这时候会通过server.xml读取配置文件);

    4. 高层API对request进行解析,得到List<FileItem> list集合;

    5. 迭代list,使用item.isFormField()方法判断该item是否问文件,如果是,则使用item.write(new File(path,fileName)),写入到指定目录。

 

  好,使用servlet进行文件上传的大致流程就是如此。 如果你有任何疑问或者认为我有理解的不太的地方,欢迎各位同行批评指正,谢谢。

 

 

  • 大小: 29.5 KB
1
0
分享到:
评论

相关推荐

    servlet 文件上传下载例子

    在这个"Servlet 文件上传下载例子"中,我们将探讨如何使用Servlet实现文件的上传和下载功能,这对于构建一个简单的图片文件服务器至关重要。 1. **文件上传** - **MultipartRequest**: 在Servlet中,处理文件上传...

    JSP+Servlet实现文件上传到服务器功能

    本文实例为大家分享了JSP+Servlet实现文件上传到服务器功能的具体代码,供大家参考,具体内容如下 项目目录结构大致如下: 正如我在上图红线画的三个东西:Dao、service、servlet 这三层是主要的结构,类似 MVC ...

    servlet实现文件上传下载

    总结来说,实现Servlet文件上传下载需要理解Servlet生命周期、HTTP请求处理、多部分数据解析以及文件I/O操作。Apache Commons FileUpload库简化了这一过程,但理解其背后的原理对于解决可能出现的问题和优化性能至关...

    servlet实现文件上传功能

    总结来说,Servlet实现文件上传功能涉及了HTTP协议、Servlet API的使用、文件I/O操作、安全性考量以及用户交互优化等多个方面。通过深入理解和实践这些知识点,我们可以构建出健壮、安全的文件上传功能。

    使用Servlet实现文件的上传与下载

    以上代码片段展示了如何使用Servlet进行文件上传和下载的基本操作。在实际应用中,还需要考虑错误处理、权限控制、文件大小限制等问题。对于大型项目,可以考虑使用成熟的框架如Spring MVC,它提供了更高级别的文件...

    Servlet中文件上传和下载

    总结起来,Servlet中的文件上传和下载涉及到HTTP多部分请求、文件流操作、响应头设置等多个方面。通过JSP和Javabean,我们可以更方便地在页面上与用户交互,同时封装和管理业务逻辑。理解并熟练掌握这些技术,对于...

    JAVA_servlet的文件上传案例

    在本案例"JAVA_servlet的文件上传"中,我们将深入探讨如何使用Servlet实现文件上传功能,这对于构建交互性强的Web应用程序是至关重要的。文件上传功能允许用户在Web表单中选择本地文件并将其发送到服务器进行存储或...

    使用jQuery ajaxFileUpload+servlet实现文件上传

    在这个场景下,我们将探讨如何结合`jQuery ajaxFileUpload` 和Servlet实现文件上传的功能。 首先,`jQuery ajaxFileUpload` 插件允许用户在不刷新页面的情况下上传文件,提供了一种友好的用户体验。它的主要优点...

    servlet实现多文件上传

    本篇文章将深入探讨如何使用Servlet实现多文件上传的功能。多文件上传是Web应用中常见的一种需求,例如用户可能需要上传一组图片、文档或其他类型的数据。Servlet提供了一种灵活的方式来处理这种需求。 首先,我们...

    【Demo Project】ajaxSubmit+Servlet表单文件上传和下载

    【AjaxSubmit+Servlet实现表单文件上传与下载详解】 在Web开发中,文件上传和下载是常见的功能,尤其是在用户交互...通过实际操作和学习`upload-download-servlet`项目,开发者可以深入理解文件上传下载的完整流程。

    servlet多文件上传(带进度条)

    本示例主要讨论的是如何使用Servlet实现多文件上传,并且在此过程中添加进度条功能,为用户提供更好的交互体验。 首先,我们要理解文件上传的基本原理。在HTML表单中,我们可以使用`&lt;input type="file" multiple&gt;`...

    文件上传与下载servlet

    除了直接使用Servlet API外,还可以借助开源库如Apache Commons FileUpload简化文件上传过程,或者使用Spring MVC等高级框架,它们提供了更便捷的文件操作接口和错误处理机制。 总之,文件上传与下载是Web应用中不...

    jsp+servlet实现文件上传下载

    `upload`方法执行实际的文件上传操作;`save`方法则负责将文件保存到服务器上的指定位置。 #### 文件下载功能实现 ##### 下载页面设计 对于文件下载功能,同样需要一个简单的HTML表单来收集用户输入的文件名。 `...

    jsp,servlet上传下载文件

    文件上传下载是 Web 应用中的一种常见需求,使用 jsp 页面和 servlet 实现文件上传下载是其中的一种解决方案。下面将详细介绍 jsp、servlet 文件上传下载技术。 文件上传下载原理 文件上传下载的原理是将客户端的...

    Servlet 3.0新特性——文件上传接口

    同时,这些改进也使得文件上传操作更加安全,更适应现代Web应用的需求。 如果你想要深入了解Servlet 3.0的文件上传功能,可以通过阅读指定的博文链接(已提供但此处未显示)或者查阅相关的Java EE 6文档,进一步...

    Java(Servlet)上传文件的demo

    本示例"Java(Servlet)上传文件的demo"提供了一个简单的文件上传功能,适用于初学者理解和实践。以下是对这个demo的详细解析: 1. **Servlet基本概念**: Servlet是一个Java类,遵循Servlet API规范,它扩展了...

    servlet jsp javabean 实现的文件上传

    在文件上传场景中,我们可以创建一个JavaBean来处理文件的保存、重命名等操作。 - 这个JavaBean可以包含文件名、文件大小、文件类型等属性,以及保存文件、验证文件类型的公共方法。 - 在Servlet中,我们实例化这...

    jsp+servlet文件上传

    本篇文章将深入讲解如何使用JSP和Servlet实现文件上传。 首先,我们需要了解`JSP`的基本概念。JSP是一种服务器端脚本语言,允许开发者将HTML、CSS、JavaScript与Java代码混合编写,从而在服务器端生成动态网页内容...

    Java servlet 和 swf上传超大文件源码

    3. **事件监听**:注册事件处理器,如`uploadSuccess`、`uploadStart`和`uploadError`,以便在文件上传过程中进行相应的操作。 4. **触发上传**:当用户选择文件后,调用`swfupload.startUpload()`方法开始上传。 *...

    jsp+servlet实现文件上传和下载

    在这个主题中,“jsp+servlet实现文件上传和下载”是核心知识点,我们将深入探讨如何利用这两个组件以及Apache的`commons-fileupload`和`commons-io`库来完成这一任务。 1. **文件上传** 文件上传通常涉及用户通过...

Global site tag (gtag.js) - Google Analytics