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 阅读(1569) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
<2024年3月>
252627282912
3456789
10111213141516
17181920212223
24252627282930
31123456

留言簿(2)

我参与的团队

文章档案(22)

搜索

  •  

最新评论