【问题标题】:Can we find out when a Paperclip download is complete?我们可以知道回形针下载完成的时间吗?
【发布时间】:2011-01-24 21:54:04
【问题描述】:

我有一个应用程序,我需要知道用户的 Rails/Paperclip 文件下载何时完成。我的应用设置为与 Amazon S3 交互,当用户收到完整的文件时,我需要运行一个 javascript 函数。

我该怎么做?

【问题讨论】:

  • 只是一个提示,如果您使用 send_file 您可以重新定义此方法以在完成后更改应用程序中的某些状态(会话中的值),客户端页面可以通过 ajax 请求定期调用您的应用程序并启动完成工作后的 js 函数...我不知道这样做的干净方法。无论如何,如果您发布控制器操作,我可以更好地理解问题。

标签: ruby-on-rails ruby-on-rails-3 amazon-s3 paperclip


【解决方案1】:

跟踪天气与下载是否完成很难,尤其是在 Javascript 中。您的问题中有一些模糊的线条,这让我认为这是不可能的。

首先,send_file 传递一个特殊的标头来告诉网络服务器告诉它要发送什么。见the send_file docs。 Rails 实际上根本不发送文件,它设置了这个标头,告诉网络服务器发送文件,然后立即返回,然后继续处理另一个请求。为了能够跟踪下载是否完成,您必须占用 Rails 应用程序进程发送文件并阻止直到用户下载它,而不是将其留给网络服务器(这是它的设计目的)。这是超级低效的。

接下来,如果你正在下载一个文件,你怎么还能在一个页面上执行一个javascript函数呢?您的用户单击文件下载链接并被带到文件所在的任何位置,天气是来自 Rails 的 send_file 或重定向到 S3 或其他任何地方,他们不再位于他们来自的页面上。如果您正在考虑 Chrome 或 Firefox 的工作方式,即下载进入下载管理器并且用户停留在页面上,那么旧页面上不再与服务器交互!如果您希望在下载完成时通知该页面,则需要定期检查或长时间轮询服务器以查看下载是否完成。

我认为通过重定向到 S3 文件并设置会话变量以在下载完成后将用户重定向到您希望他们去的地方,这样他们下次访问任何页面时,他们会得到更好的服务在您计划的流程中。

希望这会有所帮助!

【讨论】:

  • 非常感谢@homairs!我将把这个问题留一点,看看是否有人知道一种有效地做到这一点的方法。 +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
相关资源
最近更新 更多