帶進度條的文件上傳


帶進度條的文件上傳
uploadservlet只是實現了普通的文件上傳,並且附帶普通文本域的提交。如果需要顯示進度條,實時顯示文件上傳進度
需要使用Ajaxj技術
工作原理
其實際就是在處理上傳文件的同時,將上傳進度的信息例如文件總長噸,已經上傳多少,傳輸速率寫入session中,客戶端游覽器
利用Ajax技術再新開一個獨立的進程從session中獲取上傳進度信息,並實時顯示,Ajax技術能夠 不刷新頁面獲取服務器數據。session
可看做是服務器內存,可以用於存放少量的客戶信息。
上傳進度條用兩個<div>標簽實現,通過控制<div>de css屬性就可以顯示一個html版的進度條。<div>標簽連同css樣式,javascript腳本
Ajax技術,可以實現非常豐富的效果
代碼如下
<style type="text/css">
#progressBar{width; 400px; height; 12px;background;#FFFFFF;border; 1px
slid #000000;padding;1px;}
#progressBaritem{width:30%;height:100%;background:#FF0000;}
</style>
<div id="progressBar"><"div id="progressBaritem"></div></div>
上傳監聽器
commons-fileupload版1.2支持上傳監聽,只需要實現一個監聽器,並把它添加到上傳組件上即可。監聽器需要實現它的progresslistener
舉例如下
public  class  uploadListener  implements  progressListener{
     
         private uploadstatus status;          記錄上傳信息的javaBean
      
          public uploadListener(uploadstatus  status){     //構造函數
             
         this.status=status;
}
public void update(long bytesRead, long contentLength,int items){
        status.setBytesRead(bytesRead);                 已經讀取的數據長度
        status.setContentLength(contenLength);         所上傳的文件總長度
        status.setItems(items);                                   正在保存的第幾個文件


}
}
prongressListener 接口只有一個方法:update(long bytesRead,long contenLength,int items).
參數byteRead表示已經上傳的字節數contentLength表示上傳文件的總長度(如果為-1則表示總長度未知)
items表示正在上傳的第幾個文件。
添加了監聽器后,上傳組文件在上傳文件時,會不斷的回調該方法,回傳這些數據。利用這些數據,就可以知道文件上傳的進度,並用進度條實時的現實出來
因此需要把這些數據保存起來。在上述代碼中把數據保存到了一個uploadstatus中而這是一個普通的java Bean,相關的代碼如下
public class uploadstatus{
     private long bytesRead;
     private long contentLength;
     private int  items;
     private longstartTime=System.currenTimeMillis();
    

     public long getByesRead(){
            return bytesRead;
     
}

     public void  setBytesRead(long bytesRead){
            this.bytesRead=bytesRead;
        
}
public long getContentLength(){
      return contentLength;

}
public void setContentLength(iong contentLength){
         this.contentLength=contentLength;
}
public int getItems(){
        return items;


}
public void setItems(int items){
     this.items=items;
}
public long getstartTime(){
  return startTime;
}
public void setstartTime(long startTime){
    this.startTime=startTime;
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM