注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zhouhaigang.love的博客

喜欢冬日黄昏那冻住的山

 
 
 

日志

 
 

jsp中实现文件上传  

2008-03-19 08:11:22|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Apache的commons-fileupload.jar可方便的实现文件的上传功能,本文通过实例来介绍如何使用commons-fileupload.jar。

@author:ZJ 07-2-22

Blog: http://zhangjunhd.blog.51cto.com/ 

    将Apache的commons-fileupload.jar放在应用程序的WEB-INF\lib下,即可使用。下面举例介绍如何使用它的文件上传功能。

 

1.示例1。

    DiskFileUpload类会对mulipart类的表单中的所有字段进行处理,不只是file字段。getName()得到文件名,getString()得到表单数据内容,isFormField()可判断是否为普通的表单项。

demo1.html

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GB18030">

<title>File upload</title>

</head>

<body>

//必须是multipart的表单数据。

<form action="demo1.jsp" method="post" enctype="multipart/form-data">

 br>

  <input type="text" size="15"><br>

 br>

  <input type="file" ><br><br>

  <input type="submit" value="Commit">

</form>

</body>

</html>

demo1.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"

    pageEncoding="GB18030"%>

<%@ page import="org.apache.commons.fileupload.*"%>

<%@ page import="java.util.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<%

  boolean isMultipart=FileUpload.isMultipartContent(request);//检查输入请求是否为multipart表单数据。

  if(isMultipart==true){

     DiskFileUpload upload=new DiskFileUpload();//为该请求创建一个DiskFileUpload对象,通过它来解析请求。执行解析后,所有的表单项目都保存在一个List中。

     List items=upload.parseRequest(request);

     Iterator itr=items.iterator();

     while(itr.hasNext()){

           FileItem item=(FileItem)itr.next();

          //检查当前项目是普通表单项目还是上传文件。

           if(item.isFormField()){//如果是普通表单项目,显示表单内容。

                String fieldName=item.getFieldName();

                if(fieldName.equals("name")) //对应demo1.html中type="text"

                out.println("the field name is"+ item.getString());//显示表单内容。

                out.println("<br>");

            }

            else{//如果是上传文件,显示文件名。

              out.println("the upload fielname is"+item.getName());

             out.println("<br>");

           }

    }

}

else{

   out.println("the enctype must be multipart/form-data");

}

%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GB18030">

<title>File upload</title>

</head>

<body>

</body>

</html>

 

2.示例2。

    上传两个文件到指定的目录。

demo2.html

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GB18030">

<title>File upload</title>

</head>

<body>

<form action="demo2.jsp" method="post" enctype="multipart/form-data">

 br>

  <input type="file" ><br>

 br>

  <input type="file" ><br><br>

  <input type="submit" value="Commit">

</form>

</body>

</html>

demo2.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"

    pageEncoding="GB18030"%>

<%@ page import="org.apache.commons.fileupload.*"%>

<%@ page import="java.util.*"%>

<%@ page import="java.io.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<%String uploadPath="D:\\Dvp\\workspace4Lomboz\\Test4Jsp\\uploadfiles";

     boolean isMultipart=FileUpload.isMultipartContent(request);

     if(isMultipart==true){

          try{

               DiskFileUpload upload=new DiskFileUpload();

               List items=upload.parseRequest(request);//得到所有的文件

               Iterator itr=items.iterator();

               while(itr.hasNext()){//依次处理每个文件

                    FileItem item=(FileItem)itr.next();

                    String fileName=item.getName();//获得文件名,包括路径

                    if(fileName!=null){

                        File fullFile=new File(item.getName());

                        File savedFile=new File(uploadPath,fullFile.getName());

                        item.write(savedFile);

                     }

               }

              out.println("upload succeed");

        }

        catch(Exception e){

            e.printStackTrace();

         }

  }

  else{

        out.println("the enctype must be multipart/form-data");

  }

%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GB18030">

<title>File upload</title>

</head>

<body>

</body>

</html>

3.示例3。

    上传一个文件到指定的目录,并限定文件大小。

demo3.html

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GB18030">

<title>File upload</title>

</head>

<body>

<form action="demo3.jsp" method="post" enctype="multipart/form-data">

 br>

  <input type="file" ><br><br>

  <input type="submit" value="Commit">

</form>

</body>

</html>

demo3.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"

    pageEncoding="GB18030"%>

<%@ page import="org.apache.commons.fileupload.*"%>

<%@ page import="java.util.*"%>

<%@ page import="java.io.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<%File uploadPath=new File("D:\\upload");//上传文件目录

      if(!uploadPath.exists()){

           uploadPath.mkdirs();

       }

       String tempPath="d:\\upload\\temp\\"; // 临时文件目录

       File tempPathFile=new File("d:\\upload\\temp");

       if(!tempPathFile.exists()){

           tempPathFile.mkdirs();

      }

      try{

          DiskFileUpload fu=new DiskFileUpload();

          fu.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB

          fu.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb

          fu.setRepositoryPath(tempPath);//设置缓冲区目录

          List fileItems=fu.parseRequest(request);

          Iterator i=fileItems.iterator();

          while(i.hasNext()){

             FileItem fi=(FileItem)i.next();

             String fileName=fi.getName();

             if(fileName!=null){

                  File fullFile=new File(fi.getName());

                  File savedFile=new File(uploadPath,fullFile.getName());

                  fi.write(savedFile);

             }

        }

        out.println("upload succeed");

    }

    catch(Exception e){

        e.printStackTrace();

    }

%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GB18030">

<title>File upload</title>

</head>

<body>

</body>

</html>

4.示例4。

    利用Servlet来实现文件上传。

Upload.java

package com.zj.sample;

import java.io.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

import org.apache.commons.fileupload.*;

public class Upload extends HttpServlet {

   private String uploadPath="D:\\upload\\"; // 上传文件的目录

   private String tempPath= "d:\\upload\\temp\\"; // 临时文件目录

   public void doPost(HttpServletRequest request, HttpServletResponse response)

     throws IOException, ServletException {

      try {

           DiskFileUpload fu = new DiskFileUpload();

           fu.setSizeMax(4194304);

           fu.setSizeThreshold(4096);

           fu.setRepositoryPath(tempPath);

           List fileItems = fu.parseRequest(request);

           Iterator i = fileItems.iterator();

           while (i.hasNext()) {

                FileItem fi=(FileItem)i.next();

                String fileName=fi.getName();

                if(fileName!=null){

                     File fullFile=new File(fi.getName());

                     File savedFile=new File(uploadPath,fullFile.getName());

                     fi.write(savedFile);

                }

           }

           System.out.println("upload succeed");

       }

       catch (Exception e) {

            // 可以跳转出错页面

            e.printStackTrace();

       }

  }

public void init() throws ServletException {

      File uploadPath = new File("D:\\upload");

      if (!uploadPath.exists()) {

           uploadPath.mkdirs();

      }

      File tempPathFile = new File("d:\\upload\\temp");

      if (!tempPathFile.exists()) {

          tempPathFile.mkdirs();

      }

   }

}

demo4.html

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GB18030">

<title>File upload</title>

</head>

<body>

// action="fileupload"对应web.xml中<servlet-mapping>中<url-pattern>的设置。

<form action="fileupload" method="post" enctype="multipart/form-data">

 br>

  <input type="file" ><br><br>

  <input type="submit" value="Commit">

</form>

</body>

</html>

web.xml

   <servlet>

      <servlet-name>Upload</servlet-name>

      <servlet-class>com.zj.sample.Upload</servlet-class>

    </servlet>

   <servlet-mapping>

     <servlet-name>Upload</servlet-name>

     <url-pattern>/fileupload</url-pattern>

   </servlet-mapping>

  评论这张
 
阅读(84)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017