Java web实时进度条整个系统共用(如java上传、下载进度条、导入、导出excel进度条等)...

先上图:

文件上传的:

2017-05-04再次改进。在上传过程中用户可以按 Esc 来取消上传(取消当前上传,或者是全部上传)...

 

从服务器上压缩下载:

 

 

从excel文件导入数据:

 

从数据库导出excel:

 

批量发送短信及其它的批量数据处量:

 

1:先说说什么是进度条:进度条即计算机在处理任务时,实时的,以图片形式显示处理任务的速度,完成度,剩余未完成任务量的大小,和可能需要处理时间,显示方式可以多种,常见的是:长方形条状显示。

2:为什么要用进度条?就是要让客户直观的看到处理详情。

3:进度条的优缺点。优点:用户体念更好 缺点:由于实现方式的不同可能加大服务器的负担

4:我们在实际应用中用了内存数据库实现消息的队列。兼容了单机模式,不同Server下的集群模式。在集群模式下看一下客户机操作的日志(生产模工下不建议将处理进度信息放入日志):

在集群中请求任务是谁谁抢到谁跑。。。以前在单机模式下是用的 session 集群中就出现了很多问题,详见:

http://www.cnblogs.com/interdrp/p/5670854.html

文件拖拽上传

拖拽过程详解:

1:文件未拖出文件选择框的时候提示:将要上传的文件或文件夹拖拽至此区域

2:文件拖出文件选择框但未拖入上传的文件框提示:请继续拖拽文件或文件夹至此区域

3:文件拖出文件选择框且已拖入上传的文件框提示:文件已拖拽到上传区域内请释放鼠标

先看一下QQ邮箱的(至少比国内好多网站作得好了):

如果用户在上面的区域释放鼠标文件可以成功上传

但如果用户在下面区域虽然也提示了释放鼠标但文件不能成功上传....

 

 我们来看看某宝的(直接不支持拖拽,人家就是牛)....

 

我们再来看看百度的(直接没有任何提示)...

 

 

这是我们的:

2017-06-27更新不同状态的背景提示:

 

请继续拖拽文件或文件夹至此区域

 

2017-11-05 改进效果:

 

展开阅读全文

java web进度条

04-19

今天登陆一个php论坛,发现上传附件时,显示了文件上传的进度条,记起自己以前也研究过在J2EE下上传文件显示进度条的问题,现在整理一下,希望对以后遇到这方面问题的人能够有所帮助。 rn 获取文件上传的进度主要有二个问题需要解决,一个是上传文件后向服务器获取当前文件传输进度的问题,另一个就是服务器如何计算当前文件的传输进度。 rn 第一个问题很好解决,通过异步请求不断的向服务器请求文件上传的进度直到文件上传完毕就可以了。主要是如何解决第二个问题。 rn 现在第三方文件上传的组件很多,如commons-fileupload和cos等,不管用哪一个组件,都是以http协议为基础的,而在Servlet当中,服务器接收的任何数据,都是使用ServletInputStream来读取的,第三方的文件上传组件也是一样的。那么我们可以做一个ServletInputStream的代理类,在读取方法中记录读取数据的字节数,需要注意要区分不同的用户来记录 rnJava代码 rnpublic ServletInputStreamProxy(ServletInputStream in, rn UploadFileObserver observer) rn this.in = in; rn this.observer = observer; rn rnpublic int read(byte[] b, int off, int len) throws IOException rn int r = in.read(b, off, len); rn if (r != -1) rn observer.markUploadSize(r); rn rn return r; rn rnrnpublic ServletInputStreamProxy(ServletInputStream in,rn UploadFileObserver observer) rn this.in = in;rn this.observer = observer;rnrnpublic int read(byte[] b, int off, int len) throws IOException rn int r = in.read(b, off, len);rn if (r != -1) rn observer.markUploadSize(r);rn rn return r;rnrnrn通过上面的代码,我们可以在文件上传的时候,通过代理的ServletInputStream来记录服务器端读取到的文件字节数,但只代理ServletInputStream还不行,因为ServletInputStream是由HttpServletRequest获取的,所以我们还需要代理HttpServletRequest,这里可以用动态代理或者代理HttpServletRequestWrapper,下面给出代理HttpServletRequestWrapper的代码 rnJava代码 rnpublic class HttpServletRequestProxy extends HttpServletRequestWrapper rn rn private UploadFileObserver observer; rn public HttpServletRequestProxy(HttpServletRequest request,UploadFileObserver observer) rn super(request); rn this.observer = observer; rn rn rn /* (non-Javadoc) rn * @see javax.servlet.ServletRequestWrapper#getInputStream() rn */ rn public ServletInputStream getInputStream() throws IOException rn ServletInputStream in = super.getInputStream(); rn return new ServletInputStreamProxy(in,observer); rn rn rnrnpublic class HttpServletRequestProxy extends HttpServletRequestWrapper rn rn private UploadFileObserver observer;rn public HttpServletRequestProxy(HttpServletRequest request,UploadFileObserver observer) rn super(request);rn this.observer = observer;rn rnrn /* (non-Javadoc)rn * @see javax.servlet.ServletRequestWrapper#getInputStream()rn */rn public ServletInputStream getInputStream() throws IOException rn ServletInputStream in = super.getInputStream();rn return new ServletInputStreamProxy(in,observer);rn rnrnrn之后我们在使用第三方组件上传文件的时候,需要用HttpServletRequestProxy代替HttpServletRequest rn下面是使用cos组件上传文件的代码 rnJava代码 rnHttpServletRequestProxy uploadRequest = new HttpServletRequestProxy(request,observer); rn MultipartRequest multipart = new MultipartRequest( rn uploadRequest, rn webroot, rn sizeLimit, rn new DefaultFileRenamePolicy() rn ); rnrnHttpServletRequestProxy uploadRequest = new HttpServletRequestProxy(request,observer);rn MultipartRequest multipart = new MultipartRequest(rn uploadRequest,rn webroot,rn sizeLimit,rn new DefaultFileRenamePolicy() rn );rnrn这样,在上传文件的时候,记录了服务器端获取文件的字节长度,根据上传文件的总长度,就可以计算出文件传输进度的百分比了 论坛

没有更多推荐了,返回首页