posts - 0,  comments - 6,  trackbacks - 0


          監聽文件上傳進度

          如果你希望可以上傳很大的文件,這時,你可能想將上傳的狀態告訴用戶,如已經接收了多少。 

          觀察上傳進度需要通過一個處理監聽器來實現。

          public class UploadProgressListener implements ProgressListener {

          /**

           * pBytesRead,到目前為止已經讀取的字節數 

           * pContentLength,上傳文件的總長度

           * pItems,正在處理第幾個文件項(0 = 一個項目還沒處理, 1 = 第一個項目正在被讀取, ...

           */

          public void update(long pBytesRead, long pContentLength, int pItems) {

          System.out.println("我們正在讀取文件項目 " + pItems);

                  //pContentLength == -1,說明無法得到總數據長度

          if (pContentLength == -1) {

          System.out.println("到目前為止已經讀取了 " + pBytesRead + 字節的數據。");

          else {

          System.out.println("到目前為止已經讀取了" + pContentLength 

          中的 "+ pBytesRead + 字節");

          }

          }

          }

          上面這個監聽器是有問題的。因為它會非常頻繁地被調用。這會帶來性能問題。一個比較好
          的解決辦法是減少調用。如下代碼,為監聽器類增加一個
          kiloBytes實例屬性,其值默認為-1,每當
          pBytesRead/1024的結果變化時(即以KB為單位增加時),將新的計算結果賦值給kiloBytes,然后
          更新上傳進度信息,否則什么都不做,直接返回。這樣就可以減少信息更新的次數。如果上傳的
          文件非常大時,可以將KB單位改為MB,進一步減少信息更新的次數。

          public class UploadProgressListener implements ProgressListener {

          private long kiloBytes = -1;

          /**

           * pBytesRead,到目前為止已經讀取的字節數 

           * pContentLength,上傳文件的總長度

           * pItems,正在處理第幾個文件項(0 = 一個項目還沒處理, 1 = 第一個項目正在被讀取, ...)

           */

          public void update(long pBytesRead, long pContentLength, int pItems) {

          long kBytes = pBytesRead / 1024;// 1KB

          if (kiloBytes == kBytes) {

          return;

          }

          kiloBytes = kBytes;

          System.out.println("我們正在讀取文件項目 " + pItems);

                  //pContentLength == -1,說明無法得到總數據長度

          if (pContentLength == -1) {

          System.out.println("到目前為止已經讀取了 " + pBytesRead + 字節的數據。");

          else {

          System.out.println("到目前為止已經讀取了" + pContentLength 

          中的 "+ pBytesRead + 字節");

          }

          }

          }

              在服務器端,我們只需設計一個對象,將進度信息封裝到這個對象中,再將該對象保存在用戶會
          話中,利用上面示例代碼不斷的更新這個對象的狀態。

              在客戶端,我們可以每隔n秒鐘發起一次ajax請求,到會話中獲取文件上傳進度信息,直到上傳完
          畢。


          鄭州蜂鳥科技有限公司 申林 QQ:38185398  鄭州軟件開發興趣小組群:38236716

          學軟件開發,到蜂鳥科技!超強的師資力量 、完善的課程體系 、超低的培訓價格 、真實的企業項目。

          地址:鄭州市文化路豐產路口東50米豐產路21號SOHO世紀城西塔20樓F
          電話:0371-63839606  手機:13838505572(申老師) 13673990036 (許老師)
          QQ: 1073422643  1群:47614738 2群:108157678 
          網址:www.ntcsoft.com

          posted on 2010-09-03 23:59 whistler 閱讀(1601) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          留言簿(2)

          我參與的團隊

          文章檔案(22)

          搜索

          •  

          最新評論

          主站蜘蛛池模板: 仙游县| 东海县| 石家庄市| 湄潭县| 宜都市| 治多县| 教育| 黔南| 盐池县| 井研县| 池州市| 乐安县| 襄垣县| 陵川县| 新兴县| 淮滨县| 塘沽区| 丰都县| 大余县| 康保县| 新兴县| 临夏市| 谷城县| 金塔县| 松滋市| 绥德县| 邵东县| 乾安县| 泉州市| 上饶县| 咸丰县| 红安县| 澄迈县| 东莞市| 蕉岭县| 株洲县| 苍山县| 孙吴县| 仪征市| 顺平县| 图木舒克市|