JSP上傳文件輕鬆實現

  1. 現在jsp(SUN企業級應用的首選)被越來越多的人應用在後臺程序的開發及動態網頁的製作上了,今天就來介紹一下如何用jsp(SUN企業級應用的首選)來實現文件的上傳。  
  2.      搞了幾天,在網上查了不少資料,終於把上傳功能解決了。程序如下: 
  3.  package linkman.helper; 
  4.  import java.io.*; 
  5.  import java.util.*; 
  6.  import javax.servlet.http.HttpServletRequest; 
  7.  import javax.servlet.http.HttpServletResponse; 
  8.  import javax.servlet.ServletInputStream; 
  9.  public class UpLoadBean { 
  10.   private String SavePath = null
  11.   private String FileName = null
  12.   private String Sperator = null
  13.   private String ErrMsg = "正常返回"
  14.    
  15.   private byte[] bt = new byte[4096]; 
  16.   private byte[] prebt = new byte[4096]; 
  17.   private int t = -1; 
  18.   private long FileSize = -1; 
  19.   private boolean UserDefineFileName = false
  20.    
  21.   ///////////////////////////////////////////////// 
  22.   public UpLoadBean () { 
  23.    FileName = bringFileName (); 
  24.   } 
  25.   public UpLoadBean (String savepath) { 
  26.    SavePath = savepath; 
  27.    FileName = bringFileName (); 
  28.   } 
  29.    
  30.   ///////////////////////////////////////////////// 
  31.   // 文件名信息 
  32.   private String bringFileName () { 
  33.    Calendar dt = Calendar.getInstance (); 
  34.    String str = "" + dt.get (Calendar.YEAR) + dt.get (Calendar.MONTH) + dt.get (Calendar.DAY_OF_MONTH); 
  35.    str = str + dt.get (Calendar.HOUR) + dt.get (Calendar.MINUTE) + dt.get (Calendar.SECOND); 
  36.    return str; 
  37.   } 
  38.    
  39.   public void setFileName (String filename) { 
  40.    FileName = filename; 
  41.    UserDefineFileName = true
  42.   } 
  43.   public String getFileName () { 
  44.    return FileName; 
  45.   } 
  46.   ///////////////////////////////////////////////// 
  47.   // 上傳文件主程序 
  48.   public boolean UpLoad (HttpServletRequest request) throws Exception { 
  49.    if (SavePath == null) { 
  50.     setErrorMessage ("未設置保存上傳文件的路徑"); 
  51.     return false
  52.    } 
  53.    request.setCharacterEncoding("utf-8"); 
  54.    ServletInputStream in = request.getInputStream (); 
  55.    //////////////////////////////////////////// 
  56.    // 獲取得一行的分隔標誌 
  57.    t = in.readLine (bt, 0, bt.length); 
  58.    if (t != -1) { 
  59.     Sperator = new String (bt, 0, t); 
  60.     Sperator = Sperator.substring (0, 28); 
  61.     t = -1; 
  62.    } 
  63.     
  64.    //////////////////////////////////////////// 
  65.    // 取擴展名並設定文件全名 
  66.    do { 
  67.     t = in.readLine (bt, 0, bt.length); 
  68.     String s = new String (bt, 0, t); 
  69.     int index = s.indexOf ("filename=/""); 
  70.     if (index != -1) { 
  71.      s = s.substring (index + 10); 
  72.      index = s.indexOf ("/""); 
  73.      s = s.substring (0, index); 
  74.      index = s.lastIndexOf ("."); 
  75.      if (!UserDefineFileName) { 
  76.       FileName = FileName + s.substring (index); // 設定文件全名 
  77.      } 
  78.      t = -1; 
  79.     } 
  80.    } while (t != -1); 
  81.     
  82.    //////////////////////////////////////////// 
  83.    // 取文件內容 
  84.    FileOutputStream out = new FileOutputStream (SavePath + "//" + FileName); 
  85.     
  86.    t = in.readLine (bt, 0, bt.length); 
  87.    String s = new String (bt, 0, t); 
  88.    int i = s.indexOf ("Content-Type:"); 
  89.    if (i == -1) { 
  90.     setErrorMessage ("上傳的不是文件"); 
  91.     return false
  92.    } else { 
  93.     in.readLine (bt, 0, bt.length); // 去掉一個空行 
  94.     t = -1; 
  95.    } 
  96.     
  97.    boolean state = true
  98.    long trancsize = 0; 
  99.    try { 
  100.     t = in.readLine (bt, 0, bt.length); 
  101.     while (t != -1) { 
  102.      s = new String (bt, 0, t); 
  103.      if (s.length () > 28) { 
  104.       s = s.substring (0, 28); 
  105.       if (s.equals (Sperator)) { 
  106.        break
  107.       } 
  108.      } 
  109.       
  110.      /* 
  111.       if (bt[0] == 45 && bt[1] == 45 && bt[2] == 45 && bt[3] == 45 && bt[4] == 45) { 
  112.        break; 
  113.       } 
  114.      */ 
  115.      if (FileSize != -1) { 
  116.       if (trancsize >= FileSize) { 
  117.        throw new Exception ("上傳文件太大"); 
  118.       } 
  119.      } 
  120.      out.write (bt, 0, t); 
  121.      trancsize += t; 
  122.      t = in.readLine (bt, 0, bt.length); 
  123.     } 
  124.    } catch (Exception e) { 
  125.     state = false
  126.     out.close (); 
  127.     setErrorMessage (e.getMessage ()); 
  128.     File tmp = new File (SavePath, FileName); 
  129.     if (!tmp.delete()) { 
  130.      setErrorMessage (e.getMessage () + ",清除未完成"); 
  131.     } 
  132.    } finally { 
  133.     if (state) { 
  134.      out.close (); 
  135.     } 
  136.     return state; 
  137.    } 
  138.   } 
  139.   ///////////////////////////////////////////////// 
  140.   // 上傳文件錯誤信息 
  141.   public void setErrorMessage (String errormessage) { 
  142.    ErrMsg = errormessage; 
  143.   } 
  144.   public String getErrorMessage () { 
  145.    return ErrMsg; 
  146.   } 
  147.   ///////////////////////////////////////////////// 
  148.   // 文件大小信息 
  149.   public void setFileSize (long size) { 
  150.    FileSize = size; 
  151.   } 
  152.    
  153.   public long getFileSize () { 
  154.    return FileSize; 
  155.   } 
  156.  }// end class 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章