java进度条_JAVA上传文件进度条的实现
很久不在这里发帖子了,最近在家闲来无事,想到转视频的那东西又要做了,遂翻出以前的帖子,看到一年前丰哥让我做一下文件上传的进度条….额~~那就做一下吧。
东西很简单,主要用到commons-fileupload,其中有一个progressListener的接口,该接口可以实现实时更新已上传文件的大小,有了这个还说什么呢?
给出代码
代码packagelc.progress;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpSession;importlc.progress.vo.fileUploadStatus;importorg.apache.commons.fileupload.ProgressListener;publicclassmyProgressListenerimplementsProgressListener {privateHttpSession session;publicmyProgressListener(HttpServletRequest req) {
session=req.getSession();
fileUploadStatus status=newfileUploadStatus();
session.setAttribute(“status”, status);
}/*pBytesRead 到目前为止读取文件的比特数
* pContentLength 文件总大小
* pItems 目前正在读取第几个文件
* 只要在session中实时保存文件上传的状态(这里我用fileUploadStatus类来封装)*/publicvoidupdate(longpBytesRead,longpContentLength,intpItems) {//TODO Auto-generated method stubfileUploadStatus status=(fileUploadStatus) session.getAttribute(“status”);
status.setPBytesRead(pBytesRead);
status.setPContentLength(pContentLength);
status.setPItems(pItems);
}
}
然后在上传得servlet或action中加入这样一段代码,就可以把自定义的progressListener添加进去
代码myProgressListener getBarListener=newmyProgressListener(req);
ServletFileUpload upload=newServletFileUpload(factory);
upload.setProgressListener(getBarListener);
最后就是通过js来不断的访问另一个servlet来实时返回上传状态就可以了,限于篇幅我就不再贴代码了,有兴趣的读者可以自己下载来看。
代码下载(目标另存为就行了)
分享到:
2009-08-03 19:46
浏览 4655
评论
2 楼
yxl2005play
2012-06-01
不支持多个文件(多个)吧?!
它的监听方法
public void update(long uploadedFileSize, long fileSize, int item) {}
中的三个参数分别为:已上传字节数、文件总大小、目前正在读取第几个文件。
这样是不能满足需要的,因为我需要得的不只是 目前正在读取第几个文件,而是要获取正在读取的文件的详细信息(目的是传到页面上与记录对应)效果如下:
————————————
|文件名| 进度| 状态 |
|—-—-|———|————|
|a.txt | 100% |上传完成|
|b.txt | 45% |正在上传|
|c.txt | 0% |正在排除|
————————————
而不是一大堆文件(多个),然后在页面下方只出现一个进度条。这种效果现在是不行的。望更多同学研究下,指教指教
1 楼
clarck_913
2010-08-06
您好,我看了你附件里的代码
有点疑问。
第一,web.xml文件中没有注册监听器,您的代码中给出了实现ProgressListener接口的类,这个实现类(也就是myProgressListener)里的update方法什么时候会被调用?
第二,您是否运行过这个应用程序
我运行了,文件上传成功 但进度条没有按照预想的变化,所以才来问一下。
还没有评论,来说两句吧...