我有一个应用程序,我需要知道用户的Rails / Paperclip文件下载完成。我的应用程序设置为与Amazon S3交互,我需要在用户收到完成的文件后运行javascript函数。
我该怎么做?
答案 0 :(得分:3)
跟踪天气与否,下载完成很难,特别是在Javascript中。你的问题中有一些模糊的线条让我觉得它不可能。
首先,send_file
传递一个特殊的标题,告诉网络服务器告诉它要发送什么。见the send_file docs。 Rails实际上根本不发送文件,它设置此标头告诉Web服务器发送文件,然后立即返回,然后继续提供另一个请求。为了能够跟踪下载是否完成,您将不得不占用您的Rails应用程序进程发送文件并阻止,直到用户下载它,而不是将其留给Web服务器(这是它的设计目的)。这是非常低效的。
接下来,如果您正在下载文件,如何在页面上执行javascript函数?您的用户单击文件下载链接并被带到文件的任何位置,Rails的天气为send_file
或重定向到S3或其他任何内容,它们不再出现在他们来自的页面上。如果您正在考虑Chrome或Firefox的工作方式,即下载进入下载管理器并且用户停留在页面上,则不再与旧页面上的服务器进行交互!如果您希望该页面通知下载完成,那么您需要定期检查或长时间轮询服务器以查看下载是否已完成。
我认为通过重定向到S3文件并设置会话变量以便在下载完成后将用户重定向到您希望他们去的地方,以便下次他们访问任何页面时他们会更好在你的计划流程中。
希望这有帮助!