`

servlet实现文件上传功能

    博客分类:
  • java
阅读更多
package com.acca.action;

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

/**
 *
 * @author Administrator 文件上传 具体步骤: 1)获得磁盘文件条目工厂 DiskFileItemFactory 要导包 2) 利用 request 获取 真实路径
 *         ,供临时文件存储,和 最终文件存储 ,这两个存储位置可不同,也可相同 3)对 DiskFileItemFactory 对象设置一些 属性 4)高水平的API文件上传处理
 *         ServletFileUpload upload = new ServletFileUpload(factory); 目的是调用 parseRequest(request)方法
 *         获得 FileItem 集合list ,
 *
 *         5)在 FileItem 对象中 获取信息, 遍历, 判断 表单提交过来的信息 是否是 普通文本信息 另做处理 6) 第一种. 用第三方 提供的 item.write( new
 *         File(path,filename) ); 直接写到磁盘上 第二种. 手动处理
 *
 */
public class FileUpload extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

        request.setCharacterEncoding("utf-8"); // 设置编码

        // 获得磁盘文件条目工厂
        DiskFileItemFactory factory = new DiskFileItemFactory();
        // 获取文件需要上传到的路径
        String path = request.getRealPath("/upload");

        // 如果没以下两行设置的话,上传大的 文件 会占用 很多内存,
        // 设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同
        /**
         * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem 格式的 然后再将其真正写到 对应目录的硬盘上
         */
        factory.setRepository(new File(path));
        // 设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室
        factory.setSizeThreshold(1024 * 1024);

        // 高水平的API文件上传处理
        ServletFileUpload upload = new ServletFileUpload(factory);

        try {
            // 可以上传多个文件
            List<FileItem> list = (List<FileItem>) upload.parseRequest(request);

            for (FileItem item : list) {
                // 获取表单的属性名字
                String name = item.getFieldName();

                // 如果获取的 表单信息是普通的 文本 信息
                if (item.isFormField()) {
                    // 获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的
                    String value = item.getString();

                    request.setAttribute(name, value);
                }
                // 对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些
                else {
                    /**
                     * 以下三步,主要获取 上传文件的名字
                     */
                    // 获取路径名
                    String value = item.getName();
                    // 索引到最后一个反斜杠
                    int start = value.lastIndexOf("\\");
                    // 截取 上传文件的 字符串名字,加1是 去掉反斜杠,
                    String filename = value.substring(start + 1);
                    System.out.println(filename);

                    request.setAttribute(name, filename);

                    // 真正写到磁盘上
                    // 它抛出的异常 用exception 捕捉

                    // item.write( new File(path,filename) );//第三方提供的

                    // 手动写的
                    OutputStream out = new FileOutputStream(new File(path, filename));

                    InputStream in = item.getInputStream();

                    int length = 0;
                    byte[] buf = new byte[1024];

                    System.out.println("获取上传文件的总共的容量:" + item.getSize());

                    // in.read(buf) 每次读到的数据存放在 buf 数组中
                    while ((length = in.read(buf)) != -1) {
                        // 在 buf 数组中 取出数据 写到 (输出流)磁盘上
                        out.write(buf, 0, length);

                    }

                    in.close();
                    out.close();
                }
            }

        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            // TODO Auto-generated catch block

            // e.printStackTrace();
        }

        request.getRequestDispatcher("filedemo.jsp").forward(request, response);

    }

}
 

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

  </head>
  
  <body>
     <!-- enctype 默认是 application/x-www-form-urlencoded -->
     <form action="fileUpload.do" enctype="multipart/form-data" method="post" >
              上传文件: <input type="file" name="file"><br/>
              <input type="submit" value="提交"/>
     </form>
  </body>
</html>
 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'filedemo.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    
    文件:${requestScope.file }<br/>
  </body>
</html>
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>fileUpload</servlet-name>
    <servlet-class>com.acca.action.FileUpload</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>fileUpload</servlet-name>
    <url-pattern>/fileUpload.do</url-pattern>
  </servlet-mapping>
</web-app>
 
servlet上传时需要导入的jar包:
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
版本可以使用最新版本
 

 

分享到:
评论
1 楼 v韧竹v 2013-01-11  
这种方法可以,我现在就想DiskFileUpload这个做..

相关推荐

    DWR + Servlet 实现文件上传功能

    在IT行业中,实现文件上传功能是一项常见的需求,尤其是在Web应用中。DWR(Direct Web Remoting)和Servlet的结合提供了一种有效的方式来处理文件上传。本文将深入探讨如何利用DWR与Servlet实现在Web应用程序中添加...

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

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

    用JSPServlet实现文件上传

    ### 使用JSP与Servlet实现文件上传的深度解析 ...总之,使用JSP与Servlet实现文件上传功能,不仅需要掌握核心的编程技巧,还应注重用户体验、性能优化以及安全防护,以构建稳定、高效且安全的文件上传系统。

    java基于servlet实现文件上传功能

    "java基于servlet实现文件上传功能" 本文主要介绍了java基于servlet实现文件上传功能的详细实现过程,包括前台界面的设计和后台 servlet 的编写。下面是对该功能的详细知识点总结: 1. 文件上传的基本概念:文件...

    Servlet实现文件上传,可多文件上传示例

    本文将详细介绍如何使用Servlet实现文件上传功能,包括支持多文件上传。关键知识点包括Servlet接口、Multipart解析器、文件处理和常见配置。 首先,为了实现文件上传,我们需要依赖Apache Commons FileUpload库,它...

    【JavaScript源代码】vue form表单post请求结合Servlet实现文件上传功能.docx

    在本文中,我们将探讨如何使用Vue.js和Servlet来实现文件上传功能。Vue.js是一个轻量级的前端JavaScript框架,而Servlet是Java后端处理HTTP请求的组件。通过结合两者,我们可以构建一个完整的文件上传系统。 首先,...

    JAVA_servlet的文件上传案例

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

    jsp结合servlet实现文件上传

    本知识点主要聚焦于如何利用JSP和Servlet实现文件上传功能,这是一个在Web应用中非常实用的功能,例如用户在网站上提交简历、上传图片等。 首先,我们需要了解文件上传的基本原理。HTTP协议本身不支持文件上传,但...

    CKEditor 上传文件(Servlet实现)

    通过以上步骤,你可以成功地在CKEditor 3.6.0中集成Servlet实现的文件上传功能。这个过程不仅适用于图片,还可以扩展到其他类型的文件,如文档、音频和视频。注意在实际应用中,根据服务器环境和项目需求进行相应的...

    java基于servlet实现文件上传功能解析

    在介绍基于Servlet实现文件上传功能的过程中,首先需要明确概念和所涉及的技术要点。文件上传是一种常见的Web应用需求,用户可以通过表单提交文件到服务器,服务器端接收到文件后进行相应的处理。在Java Web开发中,...

    servlet实现文件上传下载

    本教程将详细讲解如何使用Servlet实现文件的上传和下载功能,其中涉及到的主要技术点包括Servlet API、Multipart解析以及文件流操作。 首先,我们需要了解Servlet在文件上传中的作用。Servlet在接收到客户端(通常...

    Servlet实现多文件上传功能

    本篇文章将详细讲解如何使用Servlet实现文件上传功能,特别是多文件上传。 首先,要实现文件上传,我们需要依赖Apache Commons FileUpload和Commons IO库。这两个库提供了处理文件上传的API,使得我们能够方便地...

    Servlet实现文件上传与下载

    ### Servlet实现文件上传与下载 #### 一、概述 在Web开发中,文件的上传与下载是一项非常常见的功能需求。本文将详细介绍如何使用Java Servlet技术实现文件的上传和下载功能。我们将通过一个简单的示例来展示整个...

    servlet 文件上传下载例子

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

    jsp+servlet实现文件上传下载

    ### jsp+servlet实现文件上传下载 在现代Web开发中,文件上传下载是常见的功能之一。JSP(JavaServer Pages)与Servlet技术结合可以轻松实现这一功能。本篇将详细介绍如何利用jspSmartUpload组件实现文件的上传与...

    jsp+servlet头像上传功能

    总结来说,`jsp+servlet头像上传功能`涉及到的主要知识点包括:`JSP`用于创建用户界面,`Servlet`处理文件上传逻辑,以及可能的文件验证、存储、预览和数据库操作。理解并熟练掌握这些技术,是构建高效、安全的Web...

    servlet实现的上传文件实例

    在Java Web开发中,Servlet是一种常用的服务器端编程接口,用于扩展服务器的功能。在这个"Servlet实现的上传文件...在实际项目中,我们还需要考虑并发处理、性能优化以及用户体验等因素,使得文件上传功能更加完善。

    vue+servlet的文件上传案例.rar

    接下来,我们将深入探讨这两个技术如何协同工作,实现文件上传功能。 首先,Vue.js在前端部分扮演了用户界面和数据绑定的角色。Vue组件可以创建一个上传表单,包含一个`&lt;input type="file"&gt;`元素,让用户选择要上传...

    jsp+servlet小项目(实现图片上传功能)

    本项目"jsp+servlet小项目(实现图片上传功能)"旨在教授如何利用这两者创建一个简单的图片上传功能。下面将详细介绍这个项目涉及的关键知识点。 1. JSP基础:JSP是一种动态网页技术,允许开发者在HTML页面中嵌入...

Global site tag (gtag.js) - Google Analytics