Comment déclencher le téléchargement avec des Rails send_data de l'AJAX post

Je suis en train d'utiliser send_data pour renvoyer une image PNG que la réponse pour un ajax requête post. Comment puis-je obtenir le navigateur pour déclencher un téléchargement sur le succès de rappel?

Détails

Je suis de la génération d'un grand base64 image à l'aide de canvas.toDataURL(), puis de les poster à Rails (v3.2.6). Rails décode binaire, PNG, et envoie l'image vers le client.

J'ai aussi essayé de send_file mais il a le même problème.

Autres options

  1. Télécharger l'image côté client: Nous ne pouvons pas faire cela, parce que (1) Safari se bloque sur grand base64 Url, et (2) Safari ne prend pas encore en charge le téléchargement de l'attribut sur les balises d'ancrage qui j'aurais besoin de spécifier le nom de fichier image téléchargé.

  2. Utiliser un $.get au lieu de $.post: Nous ne pouvons pas faire cela parce que nous avons besoin d'envoyer nos canvas.toDataURL() avec la demande au serveur. GET demandes d'Uri ont des limitations de taille.

  • Eh bien placer les données de la requête AJAX dans la session, puis déclencher le téléchargement par location.href="..." pointant vers un script qui envoie les en-têtes appropriés, transmet les données à partir de la session et par la suite le supprime de la session.
  • Pas sûr de savoir pourquoi vous souhaitez utiliser une requête AJAX pour télécharger un fichier. Un non-AJAX link_to que reverences un send_data/send_file action doit télécharger l'image.
  • Je pense que c'est un http standard sur la façon de télécharger des données en tant que fichier. peut-être que l'utilisation content_type: 'image/png' ?
  • J'ai eu à faire le même type de chose et a terminé juste de décodage et de l'enregistrement de l'image côté serveur, puis à l'aide de la fenêtre.ouvert en javascript pour ouvrir une fenêtre utilisée send_file du serveur pour obtenir l'image, puis il suffit de supprimer la temp de l'image sur le serveur.
InformationsquelleAutor mayatron | 2013-04-26