java 监听器实现 进度条,关于进度条,是基于Struts2的,实现ProgressListener接口解决办法...

关于进度条,是基于Struts2的,实现ProgressListener接口

按照网上的方法,实现MultiPartRequest接口,配置自己的 自己新建监听器 ,每次上传,都可以监听到,具体是在新建ProgressListener的实现类,但是过后就没反应了,意思不是说ProgressListener的实现类中update方法会不停去获取上传文件进度吗,怎么我就运行update方法。。。。

------解决思路----------------------

这个问题之前就有人问过回答了不下三次了struts2自身就有MultiPartRequest的实现。楼主到官网把struts2的对应版本的源码下载下来。找到struts2-core.jar的org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest类的代码。自己写个类实现MultiPartRequest或者继承org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest把org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest的代码copy进来主要的监听部分就在

//这里面就是解析上传文件的核心代码

private List parseRequest(HttpServletRequest servletRequest, String saveDir) throws FileUploadException {

DiskFileItemFactory fac = createDiskFileItemFactory(saveDir);

ServletFileUpload upload = new ServletFileUpload(fac);

upload.setSizeMax(this.maxSize);

/*注册上传进度监听器这里面你就可以记录进度到session中,你前台再用setInterval到另一个action中取session的进度就可以了*/

upload.setProgressListener(new ProgressListener(){

/*第一个参数代表当前已读了多少字节,第二个参数代表整个表单的长度也可以当做文件的总大小,第三个参数是代表已解析到第几个(这里对你不重要)*/

public void update(long readBytes, long contentLength, int items){

HttpSession session=ServletActionContext.getRequest().getSession();

session.setAttribute("currentProgress",readBytes);

session.setAttribute("contentLength",contentLength);

}

});

return upload.parseRequest(createRequestContext(servletRequest));

}

前台在用一个setInterval来请求另一个action那个action就从session里取进度就是了。前台的进度条显示可以用jquery的progressbar.js

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值