`

Servlet上传文件,commons-fileupload

    博客分类:
  • java
阅读更多
Servlet上传文件,commons-fileupload

<form name="uploadForm" method="POST" enctype="MULTIPART/FORM-DATA"
    action="upload">

HTTP请求正文采用"multipart/from-data"数据类型,它表示复杂的包括多个子部分的复杂表单.

不管HTTP请求正文为何种数据类型,Servlet容器都会把HTTP请求包装成一个HTTPServletRequest对象.

Servlet直接从HTTPServletRequest对象中解析出复合表单的每个子部分仍然是一项非常复杂的工作.

因此可以利用Apache提供的两个软件包来实现文件上传.

commons-fileipload-1.2.1.jar

commons-io-1.4.jar



UploadServlet.java
package mypack;

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.*;
import org.apache.commons.fileupload.servlet.*;
public class UploadServlet extends HttpServlet {
private String filePath;//存放上传文件的目录
private String tempFilePath;//存放临时文件的目录

public void init(ServletConfig config) throws ServletException {
   super.init(config);
   filePath = config.getInitParameter("filePath");
   System.out.println("filePath1 " + filePath); 
   tempFilePath = config.getInitParameter("tempFilePath");
   System.out.println("tempFilePath1 " + tempFilePath);
   filePath = this.getServletContext().getRealPath(filePath);
   System.out.println("filePath2 " + filePath);
   tempFilePath = this.getServletContext().getRealPath(tempFilePath);
   System.out.println("tempFilePath2 " + tempFilePath);
}

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

   response.setContentType("text/plain");
   //向客户端发送响应正文
   PrintWriter outNet = response.getWriter();

   try {
    //创建一个基于硬盘的FileItem工厂
    DiskFileItemFactory factory = new DiskFileItemFactory();
    //设置向硬盘写数据时所用的缓冲区的大小,此处为4K
    factory.setSizeThreshold(4*1024);
    //设置临时目录
    factory.setRepository(new File(tempFilePath));

    //创建一个文件上传处理器
    ServletFileUpload upload = new ServletFileUpload(factory);
    //设置允许上传的文件的最大尺寸,此处为4M
    upload.setSizeMax(4*1024*1024);

    List items = upload.parseRequest(request);

    Iterator iter = items.iterator();

    while(iter.hasNext()) {
     FileItem item = (FileItem)iter.next();
     if(item.isFormField()) {
      processFormField(item,outNet); //处理普通的表单域
     } else {
      processUploadedFile(item,outNet); //处理上传文件
     }
    }   
    outNet.close();
   } catch (Exception ex) {
    ex.printStackTrace();
   }
}

private void processFormField(FileItem item, PrintWriter outNet) { 
   String name = item.getFieldName();
   String value = item.getString();
   outNet.println(name + ":" + value + "\r\n");
}

private void processUploadedFile(FileItem item, PrintWriter outNet) throws Exception {
   String filename = item.getName();
   int index = filename.lastIndexOf("\\");
   filename = filename.substring(index+1, filename.length());
   long fileSize = item.getSize();

   if(filename.equals("") && fileSize == 0) 
    return;

   File uploadFile = new File(filePath + "/" + filename);
   item.write(uploadFile);
   outNet.println(filename + "is saved.");
   outNet.println("The size of " +filename+" is "+fileSize+"\r\n");
}

}



web.xml
<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>UploadServlet</servlet-name>
   <servlet-class>mypack.UploadServlet</servlet-class>
   <init-param>
    <param-name>filePath</param-name>
    <param-value>store</param-value>
   </init-param>
   <init-param>
    <param-name>tempFilePath</param-name>
    <param-value>temp</param-value>
   </init-param>
</servlet>

<servlet-mapping>
   <servlet-name>UploadServlet</servlet-name>
   <url-pattern>/upload</url-pattern>
</servlet-mapping> 



upload.htm
<html>
<head>
   <title>Upload</title>
</head>
<body>
   <form name="uploadForm" method="POST" enctype="MULTIPART/FORM-DATA"
    action="upload">
    <table>
     <tr>
      <td>
       <div align="right">
        User Name:
       </div>
      </td>
      <td>
       <input type="text" name="username" size="30" />
      </td>
     </tr>
     <tr>
      <td>
       <div align="right">
        Upload File1:
       </div>
      </td>
      <td>
       <input type="file" name="file1" size="30" />
      </td>
     </tr>
     <tr>
      <td>
       <div align="right">
        Upload File2:
       </div>
      </td>
      <td>
       <input type="file" name="file2" size="30" />
      </td>
     </tr>
     <tr>
      <td>
       <input type="submit" name="submit" value="upload">
      </td>
      <td>
       <input type="reset" name="reset" value="reset">
      </td>
     </tr>
    </table>
   </form>
</body>
</html>
 

分享到:
评论

相关推荐

    commons-fileupload-1.3.3.jar和commons-io-2.6.jar

    在Java开发中,上传文件是一项常见的任务,而`commons-fileupload-1.3.3.jar`和`commons-io-2.6.jar`是Apache Commons项目中的两个重要库,专门用于处理HTTP请求中的文件上传功能。这两个库为开发者提供了便捷、高效...

    commons-fileupload-1.3.3.jar commons-io-2.5.jar

    `commons-fileupload-1.3.3.jar` 和 `commons-io-2.5.jar` 是Apache Commons项目中的两个重要库,它们提供了强大的文件上传功能,使得开发者可以轻松地处理用户通过表单提交的文件。 Apache Commons FileUpload是...

    commons-fileupload-1.3.jar和commons-io-1.2.jar.zip

    Apache Commons FileUpload和Commons IO是两个非常重要的库,它们为Java提供了强大的文件上传和处理能力。在这个场景中,我们关注的是"commons-fileupload-1.3.jar"和"commons-io-1.2.jar"这两个文件,它们被打包在...

    commons-fileupload及源码

    7. **与其他库的集成**:Apache Commons FileUpload可与Servlet API、Spring MVC、Struts等Web框架无缝集成,简化了在这些框架中实现文件上传的复杂性。 源码分析对于理解其内部工作原理非常有帮助。`commons-...

    commons-fileupload.rar;包括commons-fileupload-1.3.1-bin和commons-io-2.4

    文件上传在Web应用中的实现并不直接内置在Servlet API中,因此,`commons-fileupload`库提供了一套完整的解决方案。它支持多部分请求(Multipart Request),这是HTTP协议中用于文件上传的一种格式。以下是一些关键...

    java+servlet+commons-io-2.4.jar+commons-fileupload-1.3.jar实现文件的上传与下载

    在Java Web开发中,文件的上传与下载是常见的功能需求,尤其...通过以上步骤,你可以实现基于Java Servlet和Apache Commons库的文件上传与下载功能。理解并熟练掌握这些知识点,对于开发高效、稳定的Web应用至关重要。

    文件上传两个jar包commons-fileupload-1.3.1和commons-io-2.4

    在这个场景中,`commons-fileupload-1.3.1.jar` 和 `commons-io-2.4.jar` 是两个至关重要的库,它们提供了强大的文件上传支持。 `commons-fileupload-1.3.1.jar` 是Apache Commons FileUpload项目的实现,这是一个...

    commons-fileupload.jar和commons-io.jar

    Apache Commons FileUpload和Commons IO两个库是Java中处理文件上传的关键组件,它们为SpringMVC和MyBatis这样的框架提供了强大的支持。本篇文章将深入探讨这两个库以及它们在图片处理中的作用。 首先,`commons-...

    commons-fileupload-1.2.jar和commons-io-1.3.2.jar

    新建一个servlet: FileUpload.java用于文件上传: package com.drp.util.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet....

    commons-fileupload-1.2.1.jar与commons-io-1.3.2.jar

    在处理文件上传时,`commons-fileupload`可能会依赖`commons-io`来完成一些底层的文件操作,比如读写文件、复制文件、检查文件是否存在等。`1.3.2`同样表示这个库的一个特定版本,它可能包含了更多的功能和改进。 ...

    commons-fileupload组件和commons-io组件

    Commons-Fileupload是Apache Commons项目的一个子项目,专门设计用于处理Servlet容器中的文件上传请求。它提供了一套API,使得开发者可以方便地解析HTTP请求中的多部分(multipart)数据,这些数据通常包含文件上传...

    commons-fileupload-1.2.2.jar和commons-io-2.4.jar包

    在实际应用中,开发者通常会结合Servlet或Spring MVC等框架,利用FileUpload和IO库提供的API来构建文件上传功能。例如,使用`DiskFileItemFactory`配置临时存储路径,创建`ServletFileUpload`实例来解析请求,再通过...

    commons-fileupload 文件上传 图片上传 demo

    4. **错误处理**:`commons-fileupload`还提供了处理上传过程中可能出现的错误和异常的机制,如文件大小超出限制、文件类型不合法等。 在`描述`中提到的`commons-fileupload-1.2.2.jar`和`commons-io.jar`是实现...

    上传文件 commons-fileupload-1.1.jar jquery.ajaxfileupload.js 以及demo

    首先,`commons-fileupload-1.1.jar` 是Apache Commons FileUpload项目的Java库,用于处理基于Servlet的文件上传请求。这个库提供了强大的功能,使得在Java Web应用中处理多部分表单数据(即通常的文件上传表单)变...

    commons-fileupload-1.3.3.jar和commons-io-1.3.2.jar程序文件

    在实际开发中,使用`Commons FileUpload`和`Commons IO`库,开发者可以方便地处理复杂的文件上传逻辑,比如限制文件类型、大小,或者进行上传后的文件处理。 这两个库在Java Web应用、尤其是Servlet和JSP开发中非常...

    maven实现的commons-fileupload的demo

    在Java Web开发中,文件上传是一项常见的功能,Apache Commons FileUpload库是实现这一功能的强大工具。本示例将深入解析如何结合Maven构建一个基于Servlet的文件上传演示项目。Maven是一个项目管理工具,它可以帮助...

    commons-fileupload-1.2.2-bin.zip

    总的来说,Apache Commons FileUpload库是Java开发人员处理文件上传问题的强大工具,它提供了一套完整的解决方案,包括解析请求、存储文件、错误处理和安全控制等。通过正确使用这个库,开发者可以避免手动处理复杂...

    commons-fileupload-1.3.1.jar

    在实际应用中,结合Servlet或Spring MVC等框架,可以轻松地集成Apache Commons FileUpload,处理用户的文件上传请求,从而构建安全、可靠的文件上传功能。同时,这个库也支持自定义策略,如文件存储路径、临时文件...

    commons-fileupload-1.3.2jar和commons-io-2.5.jar包

    Apache Commons FileUpload和Commons IO库提供了强大的支持,使得开发者能够方便地处理客户端上传的文件。这里我们将深入探讨这两个jar包的功能、使用方法以及它们如何与JSP(JavaServer Pages)结合。 `commons-...

    commons-fileupload-1.4-bin.zip

    Apache Commons FileUpload库是Java Web开发中不可或缺的一部分,它简化了文件上传操作,使得开发者能够更专注于业务逻辑,而非底层细节。通过理解其工作原理和正确使用方式,可以更好地应对实际项目中的文件上传...

Global site tag (gtag.js) - Google Analytics