java实时进度条原理

以java为例:一般来说,上传也好,下载也好,都要用到JavaI/O。
而计算进度的原理,不就是已经传输的大小与总大小的比值嘛。
这样就简单了,就拿最基本的OutputStream来说,它的基本的写出方法为
void write(byte[] b) ,实际上写出的过程不就是通过InputStream循环读,然后OutputStream循环写嘛。
你只要事先通过File类取得文件的总大小,然后在读入或写出的循环里加一个简单的进度计算的步骤,每读取或写出一次,就将已传输大小增加b.length,求出比值,更新进度条。具体的计算间隔,可以根据循环次数或时间间隔来定。

==============

很久不在这里发帖子了,最近在家闲来无事,想到转视频的那东西又要做了,遂翻出以前的帖子,看到一年前丰哥让我做一下文件上传的进度条....额~~那就做一下吧。

东西很简单,主要用到commons-fileupload,其中有一个progressListener的接口,该接口可以实现实时更新已上传文件的大小,有了这个还说什么呢?

给出代码

package lc.progress;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import lc.progress.vo.fileUploadStatus;

import org.apache.commons.fileupload.ProgressListener;

public class myProgressListener implements ProgressListener {
   
private HttpSession session;

   
public myProgressListener(HttpServletRequest req) {
        session
=req.getSession();
        fileUploadStatus status
= new fileUploadStatus();
        session.setAttribute(
"status", status);
    }

   
/* pBytesRead  到目前为止读取文件的比特数
     * pContentLength 文件总大小
     * pItems 目前正在读取第几个文件
     * 只要在session中实时保存文件上传的状态(这里我用fileUploadStatus类来封装)
    
*/
   
public void update(long pBytesRead, long pContentLength, int pItems) {
       
// TODO Auto-generated method stub
        fileUploadStatus status = (fileUploadStatus) session.getAttribute("status");
        status.setPBytesRead(pBytesRead);
        status.setPContentLength(pContentLength);
        status.setPItems(pItems);
    }

}

然后在上传得servlet或action中加入这样一段代码,就可以把自定义的progressListener添加进去

 

myProgressListener getBarListener = new myProgressListener(req);
        ServletFileUpload upload
= new ServletFileUpload(factory);
        upload.setProgressListener(getBarListener);

最后就是通过js来不断的访问另一个servlet来实时返回上传状态就可以了,限于篇幅我就不再贴代码了,有兴趣的读者可以自己下载来看。

代码下载(目标另存为就行了)

 


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值