6 votes

Téléchargement de fichiers Rails et mise à jour de l'affichage - Comment faire ?

Il semble que cela devrait être simple, mais je ne sais pas quoi faire. J'ai un lien vers un contrôleur de vue qui utilise send_data pour télécharger un fichier sur le disque dur de l'utilisateur. Cela fonctionne très bien et laisse la vue actuelle apparemment intacte.

Mais j'aimerais maintenant que la page fournisse un retour d'information une fois le téléchargement terminé. J'ai naïvement placé quelque chose comme le code suivant dans le contrôleur avant l'appel à la méthode send_data :

flash[:notice] = "Nice work, hot shot!"
send_data file, :filename=>fullname+".txt", :type=>"text/plain"

Mais cela ne fonctionne pas, car la vue actuelle ne se recharge pas pour me permettre d'afficher la var flash.

J'ai également essayé d'ajouter une vue RJS pour cette action, mais cela a donné lieu à l'ancienne erreur DoubleRender, car send_data est également une action de rendu.

Alors... euh... comment diable peut-on renvoyer des données à la vue actuelle après avoir exécuté send_data ? Ou existe-t-il une autre approche de ce problème ?

4voto

Jason stewart Points 686

Peut-être pourriez-vous définir un cookie dans la réponse et demander ce cookie avec du javascript lorsque le lien pour télécharger le fichier est cliqué.

Le cookie peut être défini comme suit :

cookies["download_finished"] = "true"
send_data file, :filename=>fullname+".txt", :type=>"text/plain"

Ensuite, il suffit de rechercher périodiquement ce cookie à l'aide de votre framework javascript favori.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X