国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用javaZoom的uploadBean擴展request的功能

2019-11-18 12:12:38
字體:
來源:轉載
供稿:網友

  在Servlet中,upload上傳是我們常用的操作之一。然而在javax.servlet包中,javax.servlet.http.HttpServletRequest對于form中的enctype
  ="mult數據庫、文件、zip文件等。假如你不需要做定制的話,盡管可以使用他們。當然定制上傳后的處理很簡單也很實用。
  javaZoom的包中共包含了7個class文件:
  UploadBean.class
  
  UploadParameters.class
  
  UploadListener.class
  
  UploadFile.class
  
  UploadException.class
  
  Archiver.class
  
  MultipartFormDataRequest.class
  
  其中,我們最感愛好的是MultipartFormDataRequest.class。正如其名,它使我們可以象處理一般的form那樣處理enctype="multipart/form-data"的form的內容。
  
  在MutipartFormDataRequest中,共有5種public方法:
  
  getParameterNames(name:String):Enumeration
  
  getParameterValue(name:String):String
  
  getParameterValues(name:String):String[]
  
  getFiles():Hashtable
  
  isMultipartFormData(req:HttpServletRequest):boolean
  
  和2種public構造函數:
  
  MultipartFormDataRequest(req:HttpServletRequest,maxcontentlength:int)
  
  MultipartFormDataRequest(req:HttpServletRequest)
  
  所有的對Mutipart的內容的分析,在構造函數中由 com.oreilly.servlet.multipart包中的分析器完成。我們無需關心原先最頭疼的對Stream內容的分析的工作,只需要象下面的代碼那樣:
  
  if (MultipartFormDataRequest.isMultipartFormData(request)){//假如是multipart類型的request
  
  MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request);
  
  }
  
  就得到了MutipartFormDataRequest的實例。
  
  假如想得到上傳的內容:
  
  Hashtable files = mrequest.getFiles();//得到所有的上傳的文件
  
  if(files!=null && !files.isEmpty()){
  
  UploadFile file=(UploadFile)files.get(name);// name:String 文件輸入框的名稱
  
  // file:UploadFile 文件
  
  }
  
  在這里,UploadFile file中包含了我們感愛好的上傳的文件的所有的信息:
  
  getData():byte[] 文件的內容
  
  getFileSize():long 文件的長度
  
  getContentType():String 文件的編碼
  
  getFileName():String 文件的名稱
  
  
  這些信息足夠我們進行一般所想要的操作了。
  
  正如uploadBean的名稱所言,uploadBean提供對某些常用上傳操作的封裝。
  
  在uploadBean中,setStoreModel(storeModel:int)提供了對上傳文件以下幾種形式的保存
  
  0 保存在內存中
  
  1 保存在指定目錄中
  
  2 保存在數據庫中
  
  3 保存在zip文件中
  
  4 保存在Tagzip文件中
  
  5 序列化形式保存
  
  6 xml形式保存
  
  不過以上每一種形式的保存,都需要符合uploadBean中所指的一些規則。如保存在數據庫中,uploadBean是把數據庫純粹作為一種存儲手段,要害字都是用TimeStamp生成的;保存在目錄中,不能指定3層以上目錄。
  
  如我們需要把上傳文件用自己的方式保存,可以采用重新編寫保存或者直接重載uploadBean實現。
  
  從byte[]data=file.getData();中,我們得到文件的字節數組;很輕易通過構造新的流,進行文件的輸入輸出,存儲到數據庫,保存在各種形式的載體中。
  
  
  實例1:上傳文件并且存放到數據庫中
  
  數據庫表格:TestTable
  
  lsh char(10) pk,
  
  nr clob(1000000)
  
  
  //數據庫基本操作
  
  package upload.example1;
  
  import java.sql.*;
  
  import javax.sq1.*;
  
  import javax.naming.*;
  
  public class DbOps(){
  
  PRivate DataSource ds;
  
  private Connection conn;
  
  private String env="java:comp/env/jdbc/TestDB";
  public String getEnv(){return env;}
  public void setEnv(String env){this.env=env;}
  public DataSource getDataSource(){//取得數據源(連結池)
  try{
  
  Context ictx=new InitalContext();
  
  ds=(DataSource)ictx.lookup(env);
  
  }catch(Exception ignore){
  
  //some debug codes
  
  }
  return ds;
  }
  public Connection getConnection(){//取得數據庫連結
  if(ds==null)ds=getDataSource();
  
  try{
  
  if(conn==null)conn=ds.getConnection();
  
  }catch(Exception ignore){
  
  //some debug codes
  
  }
  return conn;
  }
  }
  //存儲
  package upload.example1;
  
  import java.sql.*;
  
  public class DBStore(){
  
  public static String ISFILEEXIST="select count(*) from TestTable where lsh=?";
  
  public static String INSERTFILE="insert into TestTable (lsh)values(?)";
  
  public static String UPDATEFILE="update TestTable set nr=? where lsh=?";
  
  Connection conn;
  
  DbOps dbops;
  
  protected boolean isFileExist(String lsh)throws SQLException{
  
  PreparedStatement pst=conn.prepareStatement(ISFILEEXIST);
  
  pst.setString(1,lsh);
  
  ResultSet rs=pst.executeQuery();
  
  int count;
  
  for(count=0;rs.next();count=rs.getInt(1));
  
  pst.close();
  
  if(count<=0)return false;
  
  else return true;
  
  }
  
  protected void insertFile(String lsh)throws SQLException{
  
  PreparedStatement pst=conn.prepareStatement(INSERTFILE);
  
  pst.setString(1,lsh);
  
  pst.executeUpdate();
  
  pst.close();
  
  }
  
  protected void updateFile(String lsh,byte[]data)throws SQLException{
  
  PreparedStatement pst=conn.prepareStatement(UPDATEFILE);
  
  pst.setBytes(1,data);
  
  pst.setString(2,lsh);
  
  pst.executeUpdate();
  
  pst.close();
  
  }
  
  public void saveFile(String lsh,byte[]data)throws SQLException{
  
  if(lsh==null data==null lsh.trim().length()==0)return;
  
  
  if(dbops==null)dbops=new DbOps();
  
  if(conn==null)conn=dbops.getConnection();
  
  
  if(!isFileExist(lsh)){
  
  insertFile(lsh);
  
  }
  
  updateFile(lsh,data);
  
  
  conn.close();
  
  conn=null;
  
  }
  
  }
  
  //servlet 片斷(servlet 中應包含javazoom.upload.*;java.util.*;)
  
  DBStore dbs=new DBStore();
  
  if (MultipartFormDataRequest.isMultipartFormData(request))
  
  {
  
  MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request);
  
  if(mrequest.getParameter("submit")!=null){
  
  String lsh=mrequest.getParameter("lsh");
  
  Hashtable files = mrequest.getFiles();
  
  UploadFile file = files.get("ufile");
  
  byte[]data=file.getData();
  
  try{
  
  dbs.saveFile(lsh,data);
  
  }catch(Exception e){
  
  //debugCodes
  
  }
  }
  }
  //Submit Html 片斷
  

  

  

  

  

  實際運行以上代碼時,注重DbOps的env參數需要和實際的服務器配置的連結池參數一致,并且需要有upload.jar 和 cos.jar這兩個包。假如是在WebShpere 4上,請把他們拷貝到項目的webapplication/WEB-INF/lib下。假如是Resin上,把他們拷貝到項目的WEB-INF/lib下。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 繁峙县| 双鸭山市| 新兴县| 禹城市| 黔西| 白玉县| 灵璧县| 汤原县| 恭城| 平湖市| 错那县| 九龙县| 师宗县| 营山县| 盐源县| 石屏县| 钟祥市| 龙南县| 安徽省| 南投市| 古蔺县| 隆安县| 星座| 郴州市| 玛曲县| 肥西县| 伊金霍洛旗| 广南县| 策勒县| 化德县| 青阳县| 湘阴县| 宜州市| 田林县| 南京市| 陵水| 彰化县| 三门峡市| 鹤岗市| 来宾市| 根河市|