Je génère une image côté client et je l'affiche avec du HTML comme ceci:
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgM...."/>
Je souhaite offrir la possibilité de télécharger l'image générée.
Comment puis-je réaliser que le navigateur ouvre une boîte de dialogue de sauvegarde de fichier (ou simplement télécharger l'image comme le ferait Chrome ou Firefox dans le dossier de téléchargement) qui permet à l'utilisateur d'enregistrer l'image sans faire un clic droit et de l'enregistrer sous l'image?
Je préférerais une solution sans interaction avec le serveur. Je suis donc conscient que ce serait possible si je télécharge d'abord l'image puis que je lance le téléchargement.
Merci beaucoup!
la source
vous pouvez utiliser l'attribut de téléchargement sur une balise a ...
<a href="data:image/jpeg;base64,/9j/4AAQSkZ..." download="filename.jpg"></a>
voir plus: https://developer.mozilla.org/en/HTML/element/a#attr-download
la source
download
attribut n'est toujours pas pris en charge par Safari et IE.Je suppose qu'une img balise est nécessaire comme un enfant d'une une étiquette, de la façon suivante:
<a download="YourFileName.jpeg" href="data:image/jpeg;base64,iVBO...CYII="> <img src="data:image/jpeg;base64,iVBO...CYII="></img> </a>
ou
<a download="YourFileName.jpeg" href="/path/to/OtherFile.jpg"> <img src="/path/to/OtherFile.jpg"></img> </a>
Seulement en utilisant l' une balise comme expliqué dans # 15 n'a pas fonctionné pour moi avec la dernière version de Firefox et Chrome, mais mettre les mêmes données d'image dans les deux a.href et img.src balises travaillé pour moi.
À partir de JavaScript, il pourrait être généré comme ceci:
var data = canvas.toDataURL("image/jpeg"); var img = document.createElement('img'); img.src = data; var a = document.createElement('a'); a.setAttribute("download", "YourFileName.jpeg"); a.setAttribute("href", data); a.appendChild(img); var w = open(); w.document.title = 'Export Image'; w.document.body.innerHTML = 'Left-click on the image to save it.'; w.document.body.appendChild(a);
la source
Jetez un œil à FileSaver.js . Il fournit une
saveAs
fonction pratique qui prend en charge la plupart des bizarreries spécifiques au navigateur.la source