关于进度条,是基于Struts2的,实现ProgressListener接口
按照网上的方法,实现MultiPartRequest接口,配置自己的 自己新建易做图 ,每次上传,都可以监听到,具体是在新建ProgressListener的实现类,但是过后就没反应了,意思不是说ProgressListener的实现类中update方易做图不停去获取上传文件进度吗,怎么我就运行update方法。。。。 --------------------编程问答-------------------- 简单说,就是能监听到上传,但是没有隔段时间自动去获取上传文件进度 --------------------编程问答-------------------- 有做过的朋友看看是哪里出问题了 --------------------编程问答-------------------- --------------------编程问答-------------------- 本来上传也是要弄进度条,参照网上弄了下,我的项目action是调用别人提供的方法,貌似实现不了,也没深究,直接弄个了遮罩层提示上传,弄个gif在那一直转-。-,不是非要实现进度条可以考虑用遮罩层,坐等会的大神回答。 --------------------编程问答-------------------- 这个问题之前就有人问过回答了不下三次了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 --------------------编程问答-------------------- 恩,我只是专门写了个类FileUploadListener实现了ProgressListener接口,在parseRequest方法里面是这样的FileUploadListener progressListener = new FileUploadListener(
servletRequest);
upload.setProgressListener(progressListener);
每次上传能够执行FileUploadListener的构造方法,但是过后就没反应了,update方法没执行哦 --------------------编程问答--------------------
代码改动完要让你自己写的这个类起作用也就是要在struts.xml里面指定文件上传的解析类为你自己的这个类
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="multipart" class="你自己的解析类" scope="default" />
<constant name="struts.multipart.parser" value="multipart" /> --------------------编程问答-------------------- 恩,这个肯定要配置啊<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="requestParser"
class="com.emily.relation.sys.model.MyMultiPartRequest" scope="default" optional="true" />
<constant name="struts.multipart.handler" value="requestParser" />
话说常量名不一样哦 --------------------编程问答--------------------
楼主这个常量名是哪个版本的我没见过.我所用版本的常量名就是我写的,要知道你自己所用版本的常量名你可以直接到你自己所用版本的struts2-core.jar里面看那个struts-default.xml里面就有了. --------------------编程问答-------------------- 恩,我的是 <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="struts" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default"/>
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default" />
<constant name="struts.multipart.handler" value="jakarta" /> --------------------编程问答-------------------- 现在就很奇怪了,我上传是被监听到的,但是久没运行update方法,这个方法我看是说隔段时间去检查上传进度,需要设置周期吗之类的 --------------------编程问答-------------------- 还有个问题,监听到后传完会出现上传失败。。。 --------------------编程问答--------------------
如果你易做图已经起作用了不可能没执行update方法,这个方法不会隔断时间去检查上传进度.每次解析就会执行update --------------------编程问答--------------------
那你肯定动了其它地方我说了你把人家原来实现的那个JakartaMultiparRequestParser源码复制进来只要改动parseRequest部分增加一个易做图就可以了其它的完全不动 --------------------编程问答-------------------- 问题找到了,就是版本的原因,我现在把我用的struts2源码的JakartaMultiPartRequest类全部复制,再改parseRequest方法,就可以了。之前是直接复制别人的代码,谢谢了,耐心的帮我分析原因,分很少,我也只有这点分了,呵呵呵,再次感谢
补充:Java , Web 开发