2009-01-07 112 views
5

在我们当前的项目中,我们提供了PDF下载,可以通过他提交的HTML表单由用户自定义。动态生成PDF需要几秒钟的时间,我想要将其可视化,例如通过禁用提交按钮直到下载开始。不幸的是,我无法找到一种方法来检测下载何时开始*。所以我不知道什么时候重新启用提交按钮。有没有办法在JavaScript中检测下载的开始?

我已经试图指定一个IFrame作为我的HTML表单的目标,希望onload事件将被触发。但是,这不是 - 可能是因为PDF是使用“Content-disposition: attachment”标题发送的,并且它实际上并未加载到IFrame中。

我现在能想到的唯一解决方案就是将PDF生成为服务器上的临时文件,我希望避免这种情况。

*)让我澄清一下:我不需要知道下载是否完成,或者即使它真的开始。我想要检测浏览器询问用户是打开还是保存文件的位置。我猜这发生在浏览器收到HTTP头时。

+0

你想知道下载何时开始或何时完成?无论哪种方式,我认为临时文件不会有所作为。在客户端,你不能分辨文件是坐在服务器上还是实时生成。 – Prestaul 2009-01-07 14:15:11

+0

那么您提交表单,并且对此提交的回复是PDF文件?在暂停期间,浏览器处于等待服务器响应的模式?它是否正确? – Breton 2009-01-07 14:16:03

+0

@Breton:对! @Pretaul:我想知道下载何时开始。所以,我可以创建一个临时文件,向隐藏的IFrame发送一些HTML响应,然后通过onload处理程序中的JavaScript获取临时文件。 – 2009-01-07 15:12:54

回答

2

你想要的是能够检测到下载文件的大小从0变为正值。据我所知,这是不可能做到这一点与JavaScript - 你需要一个插件,可以访问客户端的文件系统。

推荐的解决方法:每次下载创建一个会话。让客户端询问服务器有关下载的状态。这可能是“不存在”,“未开始”,“开始”,“完成”。您需要一些服务器端的工作来坚持并更新下载状态和AJAX框架。

0

最简单的解决方案是估计时间(慷慨地)并且这样做。这是一个黑客,但它会产生预期的效果。另一种选择是使用Ajax提交表单并提交表单并让生成器将详细信息返回给调用页面。 http://www.jquery.com/可能是开始该选项的好地方。

4

如果我是你,我会做一个AJAX调用服务器的信息,生成文件,然后返回文件名/ ID /无论什么回到JavaScript,然后使window.location有点像download.php ?id = x(但该文件已经生成,因此只需设置标题并将其读出),然后您可以重新启用提交。

相关问题