posts - 0,  comments - 6,  trackbacks - 0


          監(jiān)聽文件上傳進(jìn)度

          如果你希望可以上傳很大的文件,這時(shí),你可能想將上傳的狀態(tài)告訴用戶,如已經(jīng)接收了多少。 

          觀察上傳進(jìn)度需要通過一個(gè)處理監(jiān)聽器來(lái)實(shí)現(xiàn)。

          public class UploadProgressListener implements ProgressListener {

          /**

           * pBytesRead,到目前為止已經(jīng)讀取的字節(jié)數(shù) 

           * pContentLength,上傳文件的總長(zhǎng)度

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

           */

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

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

                  //pContentLength == -1,說明無(wú)法得到總數(shù)據(jù)長(zhǎng)度

          if (pContentLength == -1) {

          System.out.println("到目前為止已經(jīng)讀取了 " + pBytesRead + 字節(jié)的數(shù)據(jù)。");

          else {

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

          中的 "+ pBytesRead + 字節(jié)");

          }

          }

          }

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

          public class UploadProgressListener implements ProgressListener {

          private long kiloBytes = -1;

          /**

           * pBytesRead,到目前為止已經(jīng)讀取的字節(jié)數(shù) 

           * pContentLength,上傳文件的總長(zhǎng)度

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

           */

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

          long kBytes = pBytesRead / 1024;// 1KB

          if (kiloBytes == kBytes) {

          return;

          }

          kiloBytes = kBytes;

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

                  //pContentLength == -1,說明無(wú)法得到總數(shù)據(jù)長(zhǎng)度

          if (pContentLength == -1) {

          System.out.println("到目前為止已經(jīng)讀取了 " + pBytesRead + 字節(jié)的數(shù)據(jù)。");

          else {

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

          中的 "+ pBytesRead + 字節(jié)");

          }

          }

          }

              在服務(wù)器端,我們只需設(shè)計(jì)一個(gè)對(duì)象,將進(jìn)度信息封裝到這個(gè)對(duì)象中,再將該對(duì)象保存在用戶會(huì)
          話中,利用上面示例代碼不斷的更新這個(gè)對(duì)象的狀態(tài)。

              在客戶端,我們可以每隔n秒鐘發(fā)起一次ajax請(qǐng)求,到會(huì)話中獲取文件上傳進(jìn)度信息,直到上傳完
          畢。


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

          學(xué)軟件開發(fā),到蜂鳥科技!超強(qiáng)的師資力量 、完善的課程體系 、超低的培訓(xùn)價(jià)格 、真實(shí)的企業(yè)項(xiàng)目。

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

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

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          留言簿(2)

          我參與的團(tuán)隊(duì)

          文章檔案(22)

          搜索

          •  

          最新評(píng)論

          主站蜘蛛池模板: 江永县| 隆安县| 遵化市| 定结县| 屏边| 定远县| 裕民县| 博爱县| 华容县| 安岳县| 永寿县| 财经| 兰州市| 图片| 宁武县| 新源县| 三穗县| 黔西县| 吉安市| 襄汾县| 广河县| 大新县| 肥西县| 剑河县| 芦溪县| 泰顺县| 张家口市| 洛南县| 哈尔滨市| 宾川县| 宁晋县| 鹤山市| 日喀则市| 永春县| 九龙城区| 瑞安市| 南昌市| 平舆县| 衡阳县| 武城县| 南岸区|