我们可以找到Paperclip下载完成的时间吗?

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

我怎样才能做到这一点?

跟踪天气或不跟踪下载完成很难,尤其是在Javascript中。 你的问题中有一些模糊的线条让我觉得它不可能。

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

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

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

希望这可以帮助!