2013-03-03 3 views
0

J'ai un fichier encodé BASE64 dans un modèle backbone.Envoyer le fichier BASE64 du modèle Backbone.js au navigateur

Vous cherchez quelque chose comme ça (console.log(model.toJSON());):

Attachments: Array[1] 
    0: Object 
     Content: "JVBERi0xLjQKJeLjz9MKMSAwIG9iaiA8PC9UeXBlL..." 
     ContentLength: 29512 
     ContentType: "application/octet-stream" 
     Name: "Notification.pdf" 

Comment puis-je l'envoyer au navigateur en téléchargement forcé sur un événement de clic? Je veux éviter de retourner sur le serveur pour ce faire.

Merci

Répondre

0

Vous avez quelques options différentes, impliquant tous Data URIs.

Si vous voulez juste faire un téléchargement rapide et ne se soucient pas de ce que le nom de fichier sera, alors vous pouvez avoir votre JS faire ceci:

window.location = 'data:application/octet-stream;base64,JVBERi0xLjQKJ...'; 

Cependant, si vous voulez être en mesure de spécifiez un nom de fichier pour le téléchargement, puis vous devez retomber sur les nouvelles fonctionnalités HTML5 et un tag <a>.

var a = document.createElement('a'); 
a.href = 'data:application/octet-stream;base64,JVBERi0xLjQKJ...'; 
a.download = 'Filename.pdf'; 
a.click(); 

Cela fonctionne sur les navigateurs plus anciens, mais puisque l'attribut download est nouveau en HTML5, ils téléchargera le fichier sans un nom de fichier approprié.

+0

Cela fonctionne très bien merci. C'est une application pour un usage interne donc pas de problème en spécifiant les navigateurs HTML5 seulement :) –