按照网上的方法,实现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<FileItem> 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