282 votes

Existe-t-il un moyen de spécifier un nom de fichier suggéré lors de l'utilisation de data : URI ?

Si par exemple vous suivez le lien :

data:application/octet-stream;base64,SGVsbG8=

Le navigateur vous invite à télécharger un fichier constitué des données contenues en base64 dans l'hyperlien lui-même. Existe-t-il un moyen de suggérer un nom par défaut dans le balisage ? Sinon, existe-t-il une solution JavaScript ?

12voto

Non.

Le but est qu'il s'agisse d'un flux de données et non d'un fichier. La source de données ne devrait pas savoir que l'agent utilisateur la traite comme un fichier... et ce n'est pas le cas.

11voto

cuixiping Points 644

Vous pouvez ajouter un attribut download à l'élément d'ancrage.

échantillon :

<a download="abcd.cer"
    href="data:application/stream;base64,MIIDhTC......">down</a>

5voto

silex Points 2137

Regardez ce lien : http://lists.w3.org/Archives/Public/uri/2010Feb/0069.html

Citation :

Cela fonctionne même (comme dans, ne cause pas de problème) avec ;base64 à la fin
comme ceci (dans Opera au moins) :

data:text/plain;charset=utf-8;headers=Content-Disposition%3A%20attachment%3B%20filename%3D%22with%20spaces.txt%22%0D%0AContent-Language%3A%20en;base64,4oiaDQo%3D

Il y a aussi des informations dans les autres messages de la discussion.

4voto

Fabian B. Points 59

Il existe une petite solution de contournement script sur Google Code qui a fonctionné pour moi :

http://code.google.com/p/download-data-uri/

Il ajoute un formulaire contenant les données, le soumet, puis supprime à nouveau le formulaire. C'est un peu compliqué, mais ça a fait l'affaire pour moi. Nécessite jQuery.

Ce fil de discussion est apparu dans Google avant la page Google Code et j'ai pensé qu'il pourrait être utile d'avoir le lien ici aussi.

4voto

user1402620 Points 31

Voici une version de jQuery basée sur la version de Holf et qui fonctionne avec Chrome et Firefox alors que sa version ne semble fonctionner qu'avec Chrome. C'est un peu étrange d'ajouter quelque chose au corps pour faire cela, mais si quelqu'un a une meilleure option, je suis tout à fait d'accord.

var exportFileName = "export-" + filename;
$('<a></a>', {
    "download": exportFileName,
    "href": "data:," + JSON.stringify(exportData, null,5),
    "id": "exportDataID"
}).appendTo("body")[0].click().remove();

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