Dict.CN 在线词典, 英语学习, 在线翻译

都市淘沙者

荔枝FM Everyone can be host

统计

留言簿(23)

积分与排名

优秀学习网站

友情连接

阅读排行榜

评论排行榜

也谈一下文件上传

也谈一下文件上传         moqiong(原作)      
    
  在这里看到很多讨论文件上传的文章,觉得各有利敝,有些只限于上传文件,而不能同时取得文本字段值,尤其是上传多个文件比较少,现本人做这个上传文件的类最多可支持上传255个文件,同时可取得文本字段值,请各位高手指正.  
   
  文件上传类:MoqUploadBean.java    
  package   net.moq.www;  
  import   java.io.*;  
  import   java.util.*;  
  import   javax.servlet.*;  
  import   javax.servlet.http.*;  
  /**  
    *  
    *   Title:   文件上传类  
    *   Description:   既能对文件进行上传,又能取得输入框的值,最多可同时上传255个文件  
    *   Copyright:   Copyright   (c)   2002  
    *   Company:   Tekson  
    *   @author   莫琼  
    *   @version   1.0  
    */  
  public   class   MoqUploadBean   {  
      private   String[]   sourceFile   =   new   String[255];           //源文件名  
      private   String[]   suffix   =   new   String[255];                   //文件后缀名  
      private   String   canSuffix   =   ".gif.jpg.jpeg.png";         //可上传的文件后缀名  
      private   String   objectPath   =   "c:/";                                   //目标文件目录  
      private   String[]   objectFileName   =   new   String[255];   //目标文件名  
      private   ServletInputStream   sis   =   null;                           //输入流  
      private   String[]   description   =   new   String[255];         //描述状态  
      private   long   size   =   100   *   1024;                                         //限制大小  
      private   int   count   =   0;                                                           //已传输文件数目  
      private   byte[]   b   =   new   byte[4096];                                   //字节流存放数组  
      private   boolean   successful   =   true;  
      private   Hashtable   fields   =   new   Hashtable();  
      public   MoqUploadBean()   {  
      }  
      //设置上传文件的后缀名  
      public   void   setSuffix(String   canSuffix)   {  
          this.canSuffix   =   canSuffix;  
      }  
      //设置文件保存路径  
      public   void   setObjectPath(String   objectPath)   {  
          this.objectPath   =   objectPath;  
      }  
      //设置文件保存路径  
      public   void   setSize(long   maxSize)   {  
          this.size   =   maxSize;  
      }  
      //文件上传处理程序  
      public   void   setSourceFile(HttpServletRequest   request)   throws   IOException   {  
          sis   =   request.getInputStream();  
          int   a   =   0;  
          int   k   =   0;  
          String   s   =   "";  
          while   (   (a   =   sis.readLine(b,   0,   b.length))   !=   -1)   {  
              s   =   new   String(b,   0,   a);  
              if   (   (k   =   s.indexOf("filename=\""))   !=   -1)   {  
                  //   取得文件数据  
                  s   =   s.substring(k   +   10);  
                  k   =   s.indexOf("\"");  
                  s   =   s.substring(0,   k);  
                  sourceFile[count]   =   s;  
                  k   =   s.lastIndexOf(".");  
                  suffix[count]   =   s.substring(k   +   1);  
                  if   (canTransfer(count))   {  
                      transferFile(count);  
                  }  
                  ++count;  
              }   else   if   (   (k   =   s.indexOf("name=\""))   !=   -1)   {  
                  //   普通表单输入元素,获取输入元素名字  
                  String   fieldName   =   s.substring(k+6,   s.length()-3);  
                  sis.readLine(b,   0,   b.length);  
                  StringBuffer   fieldValue   =   new   StringBuffer(b.length);  
                  while   (   (a   =   sis.readLine(b,   0,   b.length))   !=   -1)   {  
                      s   =   new   String(b,   0,   a-2);  
                      if   (   (b[0]   ==   45)   &&   (b[1]   ==   45)   &&   (b[2]   ==   45)   &&   (b[3]   ==   45)   &&   (b[4]   ==   45))   {  
                          break;  
                      }   else   {  
                          fieldValue.append(s);  
                      }  
                  }  
                  fields.put(fieldName,   fieldValue.toString());  
              }  
              if   (!successful)  
                  break;  
          }  
      }  
      //取得表单元素值  
      public   String   getFieldValue(String   fieldName)   {  
          if   (fields   ==   null   ||   fieldName   ==   null)   {  
              return   null;  
          }  
          return   (String)   fields.get(fieldName);  
      }  
      //取得上传文件数  
      public   int   getCount()   {  
          return   count;  
      }  
      //取得目标路径  
      public   String   getObjectPath()   {  
          return   objectPath;  
      }  
      //取得源文件名  
      public   String[]   getSourceFile()   {  
          return   sourceFile;  
      }  
      //取得目标文件名  
      public   String[]   getObjectFileName()   {  
          return   objectFileName;  
      }  
      //取得上传状态描述  
      public   String[]   getDescription()   {  
          return   description;  
      }  
      //判断上传文件的类型  
      private   boolean   canTransfer(int   i)   {  
          suffix[i]   =   suffix[i].toLowerCase();  
          //这个是用来传图片的,各位可以把后缀名改掉或者不要这个条件  
          if   (sourceFile[i].equals("")   ||   (!(canSuffix.indexOf("."+suffix[i])>=0)))   {  
              description[i]   =   "ERR:   File   suffix   is   wrong.";  
              return   false;  
          }  
          else   {  
              return   true;  
          }  
      }  
      //上传文件转换  
      private   void   transferFile(int   i)   {  
          String   x   =   Long.toString(new   java.util.Date().getTime());  
          try   {  
              objectFileName[i]   =   x   +   "."   +   suffix[i];  
              FileOutputStream   out   =   new   FileOutputStream(objectPath   +   objectFileName[i]);  
              int   a   =   0;  
              int   k   =   0;  
              long   hastransfered   =   0;   //标示已经传输的字节数  
              String   s   =   "";  
              while   (   (a   =   sis.readLine(b,   0,   b.length))   !=   -1)   {  
                  s   =   new   String(b,   0,   a);  
                  if   (   (k   =   s.indexOf("Content-Type:"))   !=   -1)   {  
                      break;  
                  }  
              }  
              sis.readLine(b,   0,   b.length);  
              while   (   (a   =   sis.readLine(b,   0,   b.length))   !=   -1)   {  
                  s   =   new   String(b,   0,   a);  
                  if   (   (b[0]   ==   45)   &&   (b[1]   ==   45)   &&   (b[2]   ==   45)   &&   (b[3]   ==   45)   &&   (b[4]   ==   45))   {  
                      break;  
                  }  
                  out.write(b,   0,   a);  
                  hastransfered   +=   a;  
                  if   (hastransfered   >=   size)   {  
                      description[count]   =   "ERR:   The   file   "   +   sourceFile[count]   +  
                              "   is   too   large   to   transfer.   The   whole   process   is   interrupted.";  
                      successful   =   false;  
                      break;  
                  }  
              }  
              if   (successful)   {  
                  description[count]   =   "Right:   The   file   "   +   sourceFile[count]   +  
                          "   has   been   transfered   successfully.";  
              }  
              out.close();  
              if   (!successful)   {  
                  sis.close();  
                  File   tmp   =   new   File(objectPath   +   objectFileName[count]);  
                  tmp.delete();  
              }  
          }  
          catch   (IOException   ioe)   {  
              description[i]   =   ioe.toString();  
          }  
      }  
      public   static   void   main(String[]   args)   {  
          System.out.println("Test   OK");  
      }  
  }  
   
  文件上传调用:MoqUpload.jsp  
  〈%@   page   contentType="text/html;   charset=GB2312"   %>  
  〈html>  
  〈head>  
  〈title>文件上载〈/title>  
  〈/head>  
  〈body>  
  〈form   action="MoqUploadSubmit.jsp"   enctype="MULTIPART/FORM-DATA"   method="post">  
  作者姓名:〈input   type="text"   name="Author"   />  
  〈br   />  
  公司名称:〈input   type="text"   name="Company"   />  
  〈br   />  
  文件描述:〈input   type="text"   name="Comment"   />  
  〈br   />  
  选择文件1:〈input   type="file"   name="filename1"   />  
  〈br   />  
  选择文件2:〈input   type="file"   name="filename2"   />  
  〈br   />  
  选择文件3:〈input   type="file"   name="filename3"   />  
  〈br   />  
  选择文件4:〈input   type="file"   name="filename4"   />  
  〈br   />  
  〈input   type="submit"   value="上载"   />  
  〈/form>  
  〈/body>  
  〈/html>  
   
  文件上传提交:MoqUploadSubmit.jsp  
  〈%@   page   contentType="text/html;charset=gb2312"%>  
  〈jsp:useBean   id="fileBean"   scope="page"   class="net.moq.www.MoqUploadBean"   />  
  〈%  
  fileBean.setObjectPath("D:\\Temp\\");  
  fileBean.setSize(10000*1024);  
  fileBean.setSuffix(".gif.jpg.png.jpge.html.htm");  
  fileBean.setSourceFile(request);  
  String   []   saSourceFile   =   fileBean.getSourceFile();  
  String   []   saObjectFile   =   fileBean.getObjectFileName();  
  String   []   saDescription   =   fileBean.getDescription();  
  int   iCount   =   fileBean.getCount();  
  String   sObjectPath   =   fileBean.getObjectPath();  
  for(int   i=0;i〈iCount;i++)   {  
      out.println("〈br>源始文件:");  
      out.println(saSourceFile[i]);  
      out.println("〈br>目标文件:");  
      out.println(sObjectPath+saObjectFile[i]);  
      out.println("〈br>上传说明:");  
      out.println(saDescription[i]);  
      out.println("〈br>");  
  }  
  out.println("〈br>作者:"   +   fileBean.getFieldValue("Author"));  
  out.println("〈br>公司:"   +   fileBean.getFieldValue("Company"));  
  out.println("〈br>说明:"   +   fileBean.getFieldValue("Comment"));  
  %>  

posted on 2008-05-20 18:28 都市淘沙者 阅读(303) 评论(0)  编辑  收藏 所属分类: JSP/PHP


只有注册用户登录后才能发表评论。


网站导航: