`

使用common-fileUpload制作文件上传(DiskFileItemFactory方式)

 
阅读更多

使用common-fileUpload制作文件上传(DiskFileItemFactory方式)

所需包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar

在网络找了关于JSP上传文件问题,本来想做个利用AJAX做带进度条的文件上传功能,但是网络上的文章都比较复杂,看了半天都看不懂,发现自己连最简单的文件上传都没有做过,那个就暂时算了,老实点从简单的先做起再研究那个带进度条的文件上传。
       在网络上找了下jsp上传文件的代码,有很多,但是多数人写的不清楚,不过找了一个稍微清楚点的文章,文章地址给忘了(,真对不起人家,做人还不够厚道)。下面基本原封不动的把代码贴上来,以备后用。
首先下载:commons-fileUpload-1.2 的jar包:http://www.apache.org/commons/,同时可以把commons-IO的jar包一起下载,以后会用到的。
1、上传的前台页面:
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gbk" pageEncoding="gbk"%>
<html>
<body>
    <form action="MultipartTestServlet" enctype="multipart/form-data" method="post">
     <input type="text" name="username" /><br />
     <input type="file" name="myfile" /><br/>
     <input type="file" name="myfile" /><br/>
     <input type="submit" />
    </form>
</body>
</html>
2、上传的后台代码:
       后台代码是个servlet,很简单咯,觉得比ASP利用组件还简单。呵呵
package upload;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
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.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
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;

public class MultipartTestServlet extends HttpServlet {

public MultipartTestServlet() {
super();
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
//设置request编码,主要是为了处理普通输入框中的中文问题
request.setCharacterEncoding("gbk");
//这里对request进行封装,RequestContext提供了对request多个访问方法
RequestContext requestContext = new ServletRequestContext(request);
//判断表单是否是Multipart类型的。这里可以直接对request进行判断,不过已经以前的用法了
if(FileUpload.isMultipartContent(requestContext)){

   DiskFileItemFactory factory = new DiskFileItemFactory();
   //设置文件的缓存路径
   factory.setRepository(new File("c:/tmp/"));
   ServletFileUpload upload = new ServletFileUpload(factory);
   //设置上传文件大小的上限,-1表示无上限
   upload.setSizeMax(100*1024*1024);
   List items = new ArrayList();
    try {
        //上传文件,并解析出所有的表单字段,包括普通字段和文件字段
     items = upload.parseRequest(request);
    } catch (FileUploadException e1) {
     System.out.println("文件上传发生错误" + e1.getMessage());
    }
     //下面对每个字段进行处理,分普通字段和文件字段
   Iterator it = items.iterator();
   while(it.hasNext()){
    FileItem fileItem = (FileItem) it.next();
    //如果是普通字段
    if(fileItem.isFormField()){  
     System.out.println(fileItem.getFieldName() + "   " + fileItem.getName() + "   " + new String(fileItem.getString().getBytes("iso8859-1"), "gbk"));
    }else{
     System.out.println(fileItem.getFieldName() + "   " +
        fileItem.getName() + "   " +
        fileItem.isInMemory() + "    " +
        fileItem.getContentType() + "   " +
        fileItem.getSize());
     //保存文件,其实就是把缓存里的数据写到目标路径下
     if(fileItem.getName()!=null && fileItem.getSize()!=0){
      File fullFile = new File(fileItem.getName());
      File newFile = new File("c:/temp/" + fullFile.getName());
      try {
       fileItem.write(newFile);
      } catch (Exception e) {
       e.printStackTrace();
      }
     }else{
      System.out.println("文件没有选择 或 文件内容为空");
     }
    }

   }
}
}

}
3、编译和配置servlet
       先设置classpath,使它包含commons-fileUpload的jar包路径,然后进行编译即可,注意这里的包路径。
       然后打开站点下的web-inf路径下的web.xml,在里面添加:
<servlet>
      <servlet-name>MultipartTestServlet</servlet-name>
      <servlet-class>upload.MultipartTestServlet</servlet-class>
</servlet>
    <servlet>
      <servlet-name>dispatcher</servlet-name>
      <servlet-class>helloApp.DispatcherServlet</servlet-class>
</servlet>
好了,现在就可以文件上传了,不过运行之前记得在c:\下新建tmp和temp文件夹,别忘了,不然程序会报告错误的。

分享到:
评论

相关推荐

    使用Common-fileUpload 上传文件 读取文件内容

    本篇文章将详细讲解如何使用`Commons-FileUpload`进行文件上传,并读取上传文件的内容。 首先,了解`Commons-FileUpload`的工作原理。它解析HTTP请求,将多部分的数据分割成单独的部分,这些部分可以是文本或文件。...

    最全的common-FileUpload.jar包

    这个"最全的common-FileUpload.jar包"结合了两个关键的Apache Commons库,为开发者提供了强大的文件上传解决方案,无论是小型项目还是大型企业级应用,都能从中受益。通过深入理解和有效利用这些工具,可以极大地...

    common-io,common-fileupload.jar等jar包

    在Java开发中,`common...总之,`common-io`和`common-fileupload`是Java开发中的强大工具,它们简化了常见的I/O操作和文件上传处理,提高了开发效率。了解并熟练运用这些库,能帮助开发者更好地应对实际项目中的挑战。

    使用commons-fileupload上传文件

    【使用commons-fileupload上传文件】 Apache Commons FileUpload是Apache组织的一个子项目,专注于处理HTTP文件上传。这个组件提供了一个简洁的API,使得开发者能够轻松地在Java应用中处理由浏览器发送的多部分...

    java中common-fileupload 上传文件demo

    下面,我们将深入探讨如何使用`Commons FileUpload`库在Java中实现文件上传功能,并基于提供的"文件上传demo"进行分析。 首先,我们需要添加`Commons FileUpload`的依赖到我们的项目中。如果你使用的是Maven,可以...

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

    3. **解析请求**:使用Commons FileUpload库解析请求,获取上传的文件项。 4. **保存文件**:从文件项中获取输入流,然后写入到服务器的某个目录,完成文件上传。 四、文件下载步骤 1. **处理请求**:Servlet接收到...

    common-fileupload

    在Java Web开发中,文件的上传和下载是常见的功能需求,`commons-fileupload`组件是Apache Commons项目的一个子项目,专门用于处理HTTP请求中的多部分数据,即表单文件上传。这个组件使得开发者能够轻松地在Servlet...

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

    例如,使用`DiskFileItemFactory`配置临时存储路径,创建`ServletFileUpload`实例来解析请求,再通过`FileItem`接口处理每个上传的文件。 总之,`commons-fileupload-1.2.2.jar`和`commons-io-2.4.jar`是Java Web...

    利用commons-fileupload组件实现文件上传-实例

    通过以上步骤,我们就使用Apache Commons FileUpload组件实现了一个基本的文件上传功能。你可以根据自己的需求对这个示例进行扩展,比如添加错误处理、文件类型检查和存储优化等。参考提供的博文链接,可以获取更多...

    上传图片利用common-fileUpload的Demo

    在IT行业中,文件上传是常见的功能之一,尤其是在Web应用中,用户可能需要上传各种类型的数据,如图片、文档等。`Commons-FileUpload`是Apache Jakarta Commons项目的一部分,它为Java提供了处理HTTP多部分请求...

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

    java commons-fileupload1.2.2和common-io.1.3.2文件上传总结心得

    以下是一个使用 Commons FileUpload 处理文件上传的 Java Servlet 示例: ```java package cn.itcast.servlet; import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet....

    commons-fileupload详解

    使用`commons-fileupload`进行文件上传主要涉及两个核心类:`ServletFileUpload`和`DiskFileItemFactory`。前者负责解析上传请求,后者则用于创建临时文件来保存大文件。 ```java import org.apache.commons....

    commons-fileupload使用例子

    本篇文章将详细介绍如何使用Apache Commons FileUpload来实现文件上传操作。 首先,我们需要了解HTTP协议在处理文件上传时的机制。通常,文件上传是通过`multipart/form-data`编码类型实现的,这种编码方式允许在...

    commons-fileupload的优化实用类

    本文将深入探讨`commons-fileupload`库的一个优化实用类的使用,以及如何通过`UploadForm`和`FileWrapper`这两个类来提高文件上传的效率和安全性。 `commons-fileupload`库的核心在于其`DiskFileItemFactory`和`...

    commons-fileupload上传demo(带架包,部署下即可操作)

    在实际开发中,使用这个库可以极大地简化文件上传的代码逻辑。 以下是使用Commons FileUpload进行图片上传的基本步骤: 1. **添加依赖**:确保你的项目中包含了Apache Commons FileUpload和Apache Commons IO的...

    commons-fileupload.jar和commons-io.jar

    这个例子展示了如何使用Apache Commons FileUpload和Commons IO处理文件上传。这两个库大大简化了文件上传的实现,使得开发者可以专注于业务逻辑,而不是底层的文件操作细节。同时,它们还提供了许多高级特性,如...

    commons-fileupload文件上传组件中文教程--张孝祥写的

    Apache Commons FileUpload 是一款非常实用且功能强大的文件上传组件,广泛应用于Java Web项目中。它极大地简化了原本复杂繁琐的文件上传过程,使得开发者能够更加专注于业务逻辑的实现。本文档旨在通过详细解读...

    java使用common-fileupload实现文件上传

    `common-fileupload`处理文件上传,而`common-io`则提供了文件I/O操作的支持。 导入库后,我们可以通过以下步骤实现文件上传: 1. **创建DiskFileItemFactory实例**: `DiskFileItemFactory factory = new ...

    common-fileupload实例:fileList = upload.parseRequest(request);上传file文件和form表单提交

    在这个实例中,我们将探讨如何使用`common-fileupload`库来处理文件上传,同时结合form表单数据的提交。 首先,让我们理解`fileList = upload.parseRequest(request);`这行代码在文件上传过程中的作用。`upload....

Global site tag (gtag.js) - Google Analytics