`
longgangbai
  • 浏览: 7340580 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

常用Web文件上传方式 FileUpload 上传文件

阅读更多

  在项目中采用一個Ajax框架Ajax-Upload上传文件,想起曾经使用的FileUpload ,Cos,JspSmartUpload等上传框架加以整理.

Apache Commons FileUpload,可以在 http://jakarta.apache.org/commons/fileupload 找到。目前该项目的最新版本是 1.1.1,网上有大量的范例程序,不过后来用的时候发现大部分方法在新版本中都不推荐使用了,于是好好读了一回 API 和官方范例。

package com.vnvtrip;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
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.RequestContext;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.servlet.ServletRequestContext;
/**
 *
 * @author longgangbai
 *
 */
public class FileUploadServlet extends HttpServlet {

 private static String DEFAULT_COS_UPLOAD_DIR = "C://upload";
 private static String DEFAULT_FILE_ENCODING_CHARSET = "UTF-8";

 /**
  * Constructor of the object.
  */
 public FileUploadServlet() {
  super();
 }

 /**
  * Destruction of the servlet.
  */
 public void destroy() {
  super.destroy();
 }

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

 /**
  * 使用上传文件
  *
  * @param request
  * @param response
  * @throws ServletException
  * @throws IOException
  */
 public void service(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  PrintWriter out = response.getWriter();
  response.setCharacterEncoding(DEFAULT_FILE_ENCODING_CHARSET);
  request.setCharacterEncoding(DEFAULT_FILE_ENCODING_CHARSET);
  // 从 HTTP servlet 获取 fileupload 组件需要的内容
  RequestContext requestContext = new ServletRequestContext(request);
  // 判断是否包含 multipart 内容
  if (ServletFileUpload.isMultipartContent(requestContext)) {
   // 创建基于磁盘的文件工厂
   DiskFileItemFactory factory = new DiskFileItemFactory();
   // 设置直接存储文件的极限大小,一旦超过则写入临时文件以节约内存。默认为 1024 字节
   factory.setSizeThreshold(1024 * 1024);
   // 创建上传处理器,可以处理从单个 HTML 上传的多个上传文件。
   ServletFileUpload upload = new ServletFileUpload(factory);
   // 最大允许上传的文件大小
   upload.setSizeMax(1024 * 1024);
   // 处理上传
   List items = null;
   try {
    items = upload.parseRequest(requestContext);
    // 由于提交了表单字段信息,需要进行循环区分。
    for (int i = 0; i < items.size(); i++) {
     FileItem fi = (FileItem) items.get(i);
     // 如果不是表单内容,取出 multipart。
     if (!fi.isFormField()) {
      // 上传文件路径和文件、扩展名。
      String sourcePath = fi.getName();
      System.out.println("sourcepath" + sourcePath);
      // 获取真实文件名
      String fileName = sourcePath.substring(sourcePath
        .lastIndexOf(File.separator) + 1);
      out.println("fileName =" + fileName);
      // 创建一个待写文件
      File uploadedFile = new File(DEFAULT_COS_UPLOAD_DIR
        + File.separator + fileName);
      // 写入
      fi.write(uploadedFile);
      out.println(fileName + " 上传成功。 ");
     }
    }
   } catch (Exception e) {
    out.println(" 上传失败,请检查上传文件大小是否超过1兆,并保证在上传时该文件没有被其他程序占用。 ");
    out.println(" <br>原因: " + e.toString());
    e.printStackTrace();
   }
  }
  out.flush();
  out.close();
 }

 /**
  * Initialization of the servlet.
  *
  * @throws ServletException
  */
 public void init() throws ServletException {
 }
}

Web配置:

<?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">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>fileUpload</servlet-name>
    <servlet-class>com.vnvtrip.FileUploadServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>fileUpload</servlet-name>
    <url-pattern>/fileUpload</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

htm页面中:

注意上传文件必须的发送的Post請求同时設置:enctype="multipart/form-data
     

 <form action="./fileUpload" method="post"  enctype="multipart/form-data">
      <input type="file"   name="file" />
      <input type="submit"   name="上传文件" />
     
    </form>

分享到:
评论

相关推荐

    C#Fileupload上传控件上传任意大小的文件

    在Web开发中,FileUpload控件是ASP.NET提供的一种方便用户上传文件的组件。本主题将详细探讨如何使用C#的FileUpload控件实现上传任意大小的文件,并结合`Web.Config`配置和相关代码进行说明。 首先,我们要理解...

    C#通用文件上传类(页面所有FileUpload控件中文件)

    在Web应用开发中,文件上传功能是常见的用户交互需求,比如让用户上传图片、文档等。本篇将详细介绍如何创建一个C#通用文件上传类,以便处理页面上所有FileUpload控件中的文件。 首先,我们需要理解FileUpload控件...

    C#通用文件上传类(指定FileUpload控件文件)

    本篇文章将详细介绍如何使用C#编写一个通用的文件上传类,专门处理FileUpload控件的文件上传。 首先,FileUpload控件是ASP.NET提供的一种用于处理文件上传的服务器控件。在HTML表单中,当用户选择文件并提交表单时...

    commons-fileupload和smartupload实现文件上传

    在Java Web开发中,文件上传是一项常见的功能,Apache Commons FileUpload和Smart Upload是两个常用的文件上传组件。这里我们将深入探讨这两个库以及如何在实际项目中使用它们。 首先,Apache Commons FileUpload是...

    web开发中文件上传的各种方法

    在Web开发中,文件上传是不可或缺的功能之一,无论是用户上传头像、提交文档还是分享多媒体内容,都需要处理文件上传操作。以下将详细讲解几种常见的文件上传方法,包括JSP、AJAX、Spring、Struts、Smart Upload、...

    struts2文件上传组件commons-fileupload-1.2.1.jar

    在Struts2中,文件上传功能是通过第三方库来实现的,其中最常用的就是Apache Commons FileUpload和Apache Commons IO。这里提到的"commons-fileupload-1.2.1.jar"和"commons-io-1.4.jar"就是这两个库的特定版本。 *...

    12、Webdynpro入门之常用控件4(上传下载附件)

    在Webdynpro应用程序中,处理文件上传和下载是非常常见的需求之一。本文档详细介绍了如何使用`FileUpload`和`FileDownload`控件来实现这些功能。通过实际操作步骤与代码示例,帮助读者更好地理解和掌握这一知识点。 ...

    fileupload 文件上传

    1. **文件上传**:在Web应用中,用户可能需要上传图片、文档或视频等文件到服务器。文件上传通常涉及HTML表单、JavaScript前端处理和服务器端的接收与存储。"fileupload"可能提供了一个轻量级的框架,简化了这一过程...

    fileupload控件的使用

    FileUpload 控件是 ASP.NET 中一个常用的控件,用于上传文件到服务器端。在 Web 开发中,文件上传是一个非常常见的需求,例如上传头像、上传附件等。FileUpload 控件提供了一个简单的方式来上传文件,并且可以对上传...

    [上传下载]仿163网盘无刷新文件上传 for Jsp_fileupload_jsp.zip

    【标题】"仿163网盘无刷新文件上传 for Jsp_fileupload_jsp" 提供的是一个基于JSP的文件上传解决方案,模仿了163网盘的无刷新上传功能。这种技术允许用户在不刷新整个网页的情况下上传文件,提高了用户体验。 在Web...

    FileUpload.rar文件上传(所以文件)

    内含文档说明和demo演示!~ 用struts的commons-fileUpload.jar实现文件上传,所以文件都可以,并另加图片预览功能!~ 采用简单常用jsp+servlet实现,同样对使用struts实现上传进行了说明~

    jsp文件上传类 jsp文件上传类

    2. **Commons FileUpload库**:Apache Commons FileUpload是Java中处理文件上传的常用库,它提供了方便的API来解析`multipart/form-data`请求。我们需要在项目中引入这个库,通常通过Maven或Gradle添加依赖。 3. **...

    fileupload上传

    "fileupload上传"这个标题涉及到的是利用FileUpload组件在Tomcat服务器、MyEclipse集成开发环境以及Java Development Kit (JDK) 的环境下实现文件上传的过程。 【描述】:通过"fileupload在tomcat+MyEclipse+jdk...

    FileUpload上传第三方JAR包

    在Java Web开发中,"FileUpload上传第三方JAR包"是一个常见的需求,特别是在构建自定义应用或集成外部库时。这个过程涉及到多个知识点,包括文件上传、类路径管理以及依赖注入。下面将详细阐述这些关键点。 1. 文件...

    Struts2多个文件上传

    在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...

    基于JAVA文件上传

    在Java编程语言中,文件上传是一项常见的功能,广泛应用于各种Web应用中,如社交媒体平台、云存储服务等。实现基于Java的文件上传涉及到多个技术点,包括Servlet、HTTP协议、多部分请求(Multipart Request)以及...

    javaweb文件上传与下载

    在Java Web开发中,文件上传和下载是常见的功能需求,主要涉及到Servlet技术。Servlet是Java Servlet API提供的一个接口,用于扩展服务器的功能,处理HTTP请求。在这个"javaweb文件上传与下载"的示例中,我们将探讨...

    java文件上传常用jar包

    在文件上传方面,它提供了一个名为`FileUpload`的组件,允许用户通过拖放或选择文件的方式方便地上传文件。`primefaces-6.2.jar`包含这个组件的实现,支持多文件上传、进度条显示、文件大小限制等功能,并且与不同的...

    FileUpload.Hasfile属性值一直为false

    在.NET开发过程中,`FileUpload`控件是一个常用的组件,用于处理用户在Web表单中上传文件的功能。当用户选择一个文件并提交表单时,`FileUpload`控件的`HasFile`属性通常会返回`true`,表示有文件被选中并且可以上传...

Global site tag (gtag.js) - Google Analytics