2011-01-24 84 views
0

我有一個應用程序,我需要知道,當用戶的軌道/回形針文件下載完成。我的應用程序設置爲與Amazon S3交互,並且我需要在用戶收到完成的文件時運行JavaScript函數。我們可以找出Paperclip下載完成的時間嗎?

我該怎麼做?

+0

只是一個提示,如果使用由send_file你可以重新定義該方法完成(在會話的值)後改變應用程序中的一些狀態,客戶端頁面可以定期通過Ajax請求調用您的應用程序並啓動一個js功能時工作完成...我不知道一個乾淨的方式來做到這一點。無論如何,如果你發佈你的控制器行動,我可以更好地理解這個問題。 – andrea

回答

3

跟蹤天氣或不下載完成後是很難的,尤其是在Javascript。在你的問題中有幾條模糊的線條讓我覺得它不可能。

首先,send_file通過特別頭來告訴Web服務器,告訴它送什麼。見the send_file docs。 Rails實際上並沒有發送文件,它設置了這個頭文件,它告訴Web服務器發送文件,然後立即返回,然後繼續提供另一個請求。爲了能夠跟蹤下載是否完成,您必須佔用您的Rails應用程序進程,直到用戶下載文件並阻止爲止,而不是將其留給網絡服務器(這是其設計的目的)。這是非常低效的。

接下來,你怎麼能仍然是一個網頁執行JavaScript函數上,如果你下載文件?您的用戶點擊文件下載鏈接,並將其帶到文件所在的位置,天氣是來自Rails的send_file或重定向到S3或其他任何地方,它們不再位於它們來自的頁面上。如果您正在考慮Chrome或Firefox在下載進入下載管理器並且用戶停留在頁面上的情況下工作的方式,那麼在舊頁面上不再需要與服務器進行交互!如果您希望該頁面被通知下載完成,那麼您需要定期檢查或長時間輪詢服務器以查看下載是否完成。

我認爲你最好通過重定向到S3文件並設置一個會話變量來將用戶重定向到你希望他們在下載完成後去的地方,這樣下次他們訪問他們的任何頁面時回到你的計劃流程中。

希望這會有所幫助!

+0

非常感謝@homairs!我會留下這個問題,看看有沒有人知道如何有效地做到這一點。 +1 – sscirrus

相關問題