我需要向请求文件下载的用户显示进度条。我正在使用J2EE应用程序来生成文件。用户将提交表单数据以获取文件。服务器将所有提交的数据操作,生成并发送一个PDF文件回客户端。从服务器下载文件时显示进度条
所以我想向用户显示一个进度条,直到文件进入客户端。 有没有办法做到这一点?
我需要向请求文件下载的用户显示进度条。我正在使用J2EE应用程序来生成文件。用户将提交表单数据以获取文件。服务器将所有提交的数据操作,生成并发送一个PDF文件回客户端。从服务器下载文件时显示进度条
所以我想向用户显示一个进度条,直到文件进入客户端。 有没有办法做到这一点?
如果我理解你的话,你想显示一个进度条,直到你的服务器准备好发送一个文件,而不是显示下载文件的进度。
如果那是真的,那么你正在处理一个艰难的练习。一个可靠的进度条需要知道(非常确切)你在做什么以及需要多长时间。在你的情况下,有很多不可靠的因素(其中一个,也许最大的是网络本身)。
因此大多数开发人员使用某种“无尽的”动画来显示“正在进行的工作”。
更新
基于您的评论,显示“正在进行的工作”最简单的方法动画看起来像
$.ajax({
url: "/myscripts/myserverscript",
type: "POST",
data: {
foo: "bar"
},
dataType: "text",
beforeSend: function(xhr){
// display a progress animation
},
complete: function(xhr, status){
// hide the animation
}
...
});
在一个单一的请求的情况下。您还可以为(.ajaxStart()
和.ajaxStop()
)设置全局ajax事件处理程序来设置显示/隐藏功能。
参考文献:.ajax(),.ajaxStart(),用于服务器端文件生成.ajaxStop()
任何一种情况都是有效的。知道正在下载的文件的进度将是一件好事。或者,在服务器准备好发送文件之前,我仍然可以看到正在进行的工作。 – 2010-06-10 06:27:45
感谢您的回复。 – 2010-06-10 06:57:01
+1为简单的“无限等待” – cherouvim 2010-06-10 07:13:55
进度条:
假设我们的服务器需要多少秒生成文件。此事件由原始请求(阻止操作)触发。当这完成时,该文件将被生成并且将被发回给客户端。
同时,您希望通过其他请求(ajax)调用服务器并获取当前为特定用户生成的文件返回的百分比。
胶这里部分是:
文件下载进度条:
最好还是离开这个浏览器的原生对话框。
我可以知道如何从html/java-script获取文件下载信息吗?你能分享一些关于你说的最后一点的更多信息吗(在客户端,这都是......)? – 2010-06-10 06:39:46
在服务器端,您需要提供此信息的URL(例如Java servlet)(只需从http会话中打印百分比)。这将是纯文本(例如“20%”)还是JSON或XML取决于您以及您将如何实现客户端。在客户端,您将通过jQuery对URL进行异步请求,以便获取此信息并相应地修改DOM。这些请求需要通过javascript函数每隔X秒(比如3秒)触发setTimeout(..) – cherouvim 2010-06-10 06:47:51
对于这种方法,我真的会建议某种COMET方式,而不是本地ajax请求。 – jAndy 2010-06-10 06:51:59
在Java中,您只是围绕输入流包装了一个javax.swing.ProgressMonitorInputStream,但请注意,除非服务器以分块流模式发送,否则显示屏并不会真正表示任何内容,因为整个响应将被读取在将第一个字节传递给Java之前将其存储到内存中。
我很想知道如何做到这一点 – 2010-06-10 06:02:49
生成文件通常需要多长时间? – cherouvim 2010-06-10 06:20:36
@cherouvim:这里的时间不是一个静态的。它在文件到文件之间有所不同。最短时间为1秒,最长为20-30分钟。 – 2010-06-10 06:29:53