2004年11月12日

利用 fileupload实现文件上传

 

前几天写了一个个人收藏夹的模块,用到了fileupload组件来实现文件的上传操作,今天整理了一下,与大家共享,以前看了一写例子,虽然能实现多个文件的上传,但数目是固定的,无法实现动态增加,即使实现了表单的增加,但相关的其他信息,例如手动增加的备注等,仍然不能实现。我只好挨个上传,但最后给用户显示的时候却好像多个文件上传似的,呵呵。好了。言归正传,如果已经下载了fileuploadjar包,那么我们就可以开始开始我们的文件上传之路了。

首先是写好jsp页面,需要注意的是:必须有一个类似这样的file选择框:<input name="WJLJ" type="file" value="" size="70"/>

然后我们在form中要这样写:<form method="post" action=”UploadServlet" id="GR_GRBG_GRSC_FORM" name=" FORM"  ENCTYPE="multipart/form-data">uploadservlet是我们自己写的servlet,用于实现文件的上传,也是我们要说的重点,能不能上传,全看它了。

/**

 * 文件名称:UploadServlet.java;

 * 构:com.zzxy.control;

 *

 * 版权信息:

 */

package com.zzxy.control;

 

import com.zzxy.common.MIS_Constant;

import com.zzxy.common.PdkUtils;

import com.zzxy.model.gr.GR_Agent_Helper;

import com.zzxy.model.vo.atom.VO_PT_GRSCWJ;

import java.util.*;

import java.io.*;

import java.util.Enumeration;

 

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpSession;

 

import org.apache.commons.fileupload.*;

import com.zzxy.common.SecretCoder;

 

/**

 * 类名称:FileUploadServlet

 * 类描述:自动执行文件上传,并将自动路由到Controller及相应的Agent组件

 *

 * 人:

 * 编写日期:2004.09.09

 * 修改人:

 * 修改日期: 2004/09/11

 * 修改原因:如果上传的为空和上传的不是文件时的处理

 *          1.如果为空,则不执行写文件操作

 *          2.如果上传的文件根本不存在,则抛出"上传文件失败"

 *     本:

 */

public class UploadServlet

    extends HttpServlet {

  /**

   * 名称:UploadServlet

   * 功能:

   * 输入参数:

   * 返回参数:无

   */

  public UploadServlet() {

  }

  private static final String CONTENT_TYPE = "text/html; charset=GBK";

 

  public void init(ServletConfig config) throws ServletException

  {

    super.init(config);

  }

 

  /**

   * 名称:doPost

   * 功能:

   * 输入参数:HttpServletRequest request

   *           HttpServletResponse response

   * 返回参数:无

   */

  public void doPost(HttpServletRequest request,

                     HttpServletResponse response) throws IOException {

            response.setContentType(CONTENT_TYPE);

    try {

       PrintWriter out = response.getWriter();

      String strSizeMax = "10485760";

      String strSizeThreshold = "4096";

      //临时文件路径

      String strUploads = this.getServletContext().getRealPath("/misdoc/mydocs");

 

      //声明DiskFileUpload对象

      DiskFileUpload diskFileUpload = new DiskFileUpload();

      diskFileUpload.setSizeMax(new Long(strSizeMax).longValue());

      diskFileUpload.setSizeThreshold(new Integer(strSizeThreshold).intValue());

      //diskFileUpload.setRepositoryPath(strTmp);

     

      List fileItems = diskFileUpload.parseRequest(request);

 

      out.write("<form method=/"post/" action=/"");

      out.print( PdkUtils.appRoot(request));

      out.write("/HTTPController/" id=/"DATAFORM/" name=/"DATAFORM/">  /r/n");

 

      String strSCRID = "";

      String strSCJID = "";

      String strGJZ = "";

      String strMS = "";

      String strWJLJ = "";

      String strRequestID ="";

      String strFlag ="First";

     

      for (int m = 0; m < fileItems.size(); m++) {

        FileItem fileItem = (FileItem) fileItems.get(m);     

            if(fileItem.isFormField())

            {

            //取到隐藏域

            if (fileItem.getFieldName().equals("SCRID")) {

               strSCRID = fileItem.getString();

            }

            if (fileItem.getFieldName().equals("SCJID")) {

               strSCJID = fileItem.getString();

            }

           if (fileItem.getFieldName().equals("GJZ")) {

               strGJZ= fileItem.getString();

            }

            if (fileItem.getFieldName().equals("MS")) {

               strMS = fileItem.getString();

            }

            if (fileItem.getFieldName().equals("RequestID")) {

               strRequestID = fileItem.getString();

            }

             if (fileItem.getFieldName().equals("Flag")) {

               strFlag = fileItem.getString();

            }          

            }

           

            //忽略其他不是文件域的所有表单信息

           if (!fileItem.isFormField()) {

             strWJLJ = fileItem.getName().trim();

             File fileName = new File(strWJLJ);

             String filename = fileName.getName();  

             String strExtend = filename

                .substring(filename.lastIndexOf(".")

                           , filename.length());

            

             long size = fileItem.getSize();

             if((strWJLJ==null||strWJLJ.equals("")) && size==0)

               continue;

             else

            {

             /向数据库中增加记录

              GR_Agent_Helper gr_Agent_Helper = new GR_Agent_Helper();

              VO_PT_GRSCWJ vo_PT_GRSCWJ = new VO_PT_GRSCWJ();

              vo_PT_GRSCWJ.setWJID(gr_Agent_Helper.createPK(MIS_Constant.KEY_GRBG_GRSC_SCJID));

              vo_PT_GRSCWJ.setSCJID(Long.parseLong(strSCJID));

              filename=filename.replaceAll("'","’");

              vo_PT_GRSCWJ.setWJMC(filename);

              if(strGJZ.equals(""))

              strGJZ = filename;

              String strTime = getNowTime();

              vo_PT_GRSCWJ.setGJZ(strGJZ);

              vo_PT_GRSCWJ.setMS(strMS);

              vo_PT_GRSCWJ.setWJDX(size);

              vo_PT_GRSCWJ.setSCSJ(Long.parseLong(strTime)); 

              gr_Agent_Helper.add(vo_PT_GRSCWJ);

             ///上传文件

            

              strUploads = strUploads +"//"+ strSCRID;

              if(!new File(strUploads).isDirectory())

              new File(strUploads).mkdirs();

              String strTmp = strUploads +"//";

              diskFileUpload.setRepositoryPath(strTmp);

             String filenewName = String.valueOf(vo_PT_GRSCWJ.getWJID())+"_"+strTime + strExtend;

             strTmp = strTmp + filenewName;

             String strWJID = String.valueOf(vo_PT_GRSCWJ.getWJID());

             /

             System.out.println("准备上传文件:"+strTmp);

             //

             fileItem.write(new File(strTmp)); 

             //向后传递上传文件的信息

            out.print("<input type='hidden' name=RequestID" + " value='" + strRequestID + "'>");

            out.print("<input type='hidden' name=WJLJ" +" value='" + strWJLJ + "'>");

            out.print("<input type='hidden' name=WJID" + " value='" + strWJID + "'>");

            out.print("<input type='hidden' name=Flag" + " value='" + strFlag + "'>");

             }

          }

      }

 

      out.write("</form>/r/n");

      out.write("<script language=/"javascript/">/r/n  DATAFORM.target=/"_self/";/r/n  DATAFORM.submit();/r/n");

      out.write("</script>");

    } catch (IOException ioe) {

      forwardError("上传文件在存盘时失败,请检查指定的路径和读写权限!",request,response);

    } catch (FileUploadException ie) {

      forwardError("上传文件在存盘时失败,请检查您上传的文件大小!",request,response);

    } catch (Exception e) {

      forwardError("上传文件失败!",request,response);

System.out.println("UploadServlet: " + e.toString());

    }

  } 

 

 /**

   * 名称:显示错误页面方法

   * 功能:将错误信息显示在错误页面中

   * 输入参数:String:errorMessage:错误信息

   *          HttpServletRequest:request:Http请求对象

   *          HttpServletResponse:response:Http响应对象

   * 返回参数:

   */

  protected void forwardError(String errorMessage,

                              HttpServletRequest request,

                              HttpServletResponse response) {

    try {

      //设置错误信息

      request.setAttribute("ErrorMessage", errorMessage);

 

      //将请求传递给显示错误信息的jsp显示

      getServletContext()

          .getRequestDispatcher("/error.jsp")

          .forward(request, response);

 

    }

    catch (Exception Exp) {

   

    }

  }   

 

 

 /**

  *

  *    称:getNowTime

  *    能:获取本机时间

  * 输入参数:HttpServletRequest request

  * 返回参数:void

  */

  public String getNowTime() throws Exception {

  try{

     Calendar rightNow = Calendar.getInstance();

     String month = String.valueOf(rightNow.get(Calendar.MONTH)+1);

     String day =String.valueOf(rightNow.get(Calendar.DAY_OF_MONTH));

     String hour =String.valueOf(rightNow.get(Calendar.HOUR_OF_DAY));

     String minute =String.valueOf(rightNow.get(Calendar.MINUTE));

     String secend =String.valueOf(rightNow.get(Calendar.SECOND));

     if((rightNow.get(Calendar.MONTH)+1)<10)

     month = "0"+month;

     if(rightNow.get(Calendar.DAY_OF_MONTH)<10)

     day = "0"+day; 

     if(rightNow.get(Calendar.HOUR_OF_DAY)<10)

     hour = "0"+hour;   

     if(rightNow.get(Calendar.MINUTE)<10)

     minute = "0"+minute;

     if(rightNow.get(Calendar.SECOND)<10)

     secend = "0"+secend; 

    

     String time = String.valueOf(rightNow.get(Calendar.YEAR))+month+day+hour+minute+secend;

     return time;

    } catch (Exception ex) {

      throw ex;

    }    

 }

 

}

 

我这里写完之后自动提交了一个action,实现了servlet的重定向,并存储了文件路径等信息,试试效果还可以,另外说明一下,vo是我们生成的一个用于存储文件信息的数据库表的vo,运行环境是jdev,采用框架是我们自己设计的框架结构,是不能直接运行的哦。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值