Si par exemple vous suivez le lien:
data:application/octet-stream;base64,SGVsbG8=
Le navigateur vous invitera à télécharger un fichier composé 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?
data:application/pdf;name=document.pdf;base64,BASE64_DATA_ENCODED
Réponses:
Utilisez l'
download
attribut:Exemple en direct sur html5-demos.appspot.com / ... .
Fonctionne actuellement sur Chrome, Firefox, Edge, Opera et Safari de bureau, mais pas iOS Safari ou IE11.
la source
window.location.replace
. par exemple, si vous souhaitez créer une donnée: uri ou générée parwindow.URL.createObjectURL
, et la télécharger en tant que fichier, vous devrez créer un <a> et cliquer dessus: jsfiddle.net/flyingsheep/wpQtH (non,$(...).click()
ne fonctionne pas)$('<a href="data:text/plain,Test" download="test.txt">')[0].click()
semble bien fonctionner ici (Chrome 23) (note: j'ai utilisé laclick
méthode native , pas celle de jQuery). Démo: jsfiddle.net/2zsRWChrome rend cela très simple de nos jours:
la source
HTML uniquement: utilisez l'
download
attribut:Javascript uniquement: vous pouvez enregistrer n'importe quelle URI de données avec ce code:
Chrome, Firefox et Edge 13+ utiliseront le nom de fichier spécifié.
IE11, Edge 12 et Safari 9 (qui ne prennent pas en charge l'
download
attribut ) téléchargeront le fichier avec leur nom par défaut ou ils l'afficheront simplement dans un nouvel onglet, s'il s'agit d'un type de fichier pris en charge: images, vidéos, fichiers audio ,…la source
downloadjs
sur npmdata:
URI, ce que mentionne la question. Cette réponse fonctionne également avec les blobs et tout ce qui a un URISelon la RFC 2397 , non, il n'y en a pas.
Il ne semble pas non plus y avoir d' attribut de l'<a>
élément que vous puissiez utiliser non plus.Cependant HTML5 a par la suite introduit l'
download
attribut sur l'<a>
élément, bien qu'au moment de la rédaction le support ne soit pas universel (pas de support MSIE, par exemple)la source
J'ai regardé un peu dans les sources de Firefox dans netwerk / protocol / data / nsDataHandler.cpp
le gestionnaire de données analyse uniquement le contenu / type et le jeu de caractères et recherche s'il y a "; base64" dans la chaîne
le rfc ne spécifie aucun nom de fichier et au moins firefox ne gère aucun nom de fichier pour cela, le code génère un nom aléatoire plus ".part"
J'ai également vérifié le journal de Firefox
fichiers intéressants si vous voulez regarder les sources de mozilla:
Je pense que vous pouvez arrêter de chercher une solution pour l'instant, car je pense qu'il n'y en a pas :)
comme remarqué dans ce thread, html5 a un
download
attribut, il fonctionne également sur firefox 20 http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-downloadla source
L'extrait Javascript suivant fonctionne dans Chrome en utilisant le nouvel attribut "télécharger" des liens et en simulant un clic.
Et l'exemple suivant montre son utilisation:
la source
Non.
Le but est que c'est un flux de données, pas un fichier. La source de données ne doit pas avoir connaissance de l'agent utilisateur qui le gère comme un fichier ... et ce n'est pas le cas.
la source
data:
est de truquer un bloc de données internes au format URL sans avoir à le lire à partir d'une source basée sur un protocole. Le lien dans la réponse de @ silex montre que la possibilité de suggérer un nom préféré pour l' écrire est considérée comme utile, même si elle n'est pas encore implémentée.data:
a été spécifiquement inventé pour permettre au contenu en ligne (petit) d'apparaître dans un format d'URL fudged ensemble afin qu'il puisse être utilisé par des choses comme les balises d'image sans demande HTTP distincte. HTML dit que le contenu d'unimg src
attribut doit être une URL, c'est donc ce que la RFC 2397 a créé. Il n'y a pas de "source de données".vous pouvez ajouter un attribut de téléchargement à l'élément d'ancrage.
échantillon:
la source
Regardez ce lien: http://lists.w3.org/Archives/Public/uri/2010Feb/0069.html
Citation:
Il y a aussi quelques informations dans les autres messages de la discussion.
la source
En utilisant des travailleurs de service , cela est enfin possible dans le vrai sens du terme.
<a href, <img src
, window.open (url), absolument tout ce qui peut être fait avec une "vraie" URL.Le navigateur proposera désormais myPrettyName.jpg même si l'utilisateur ouvre le fichier dans un nouvel onglet et essaie de l'enregistrer. Ce sera exactement comme si le fichier venait du serveur.
la source
Il existe un petit script de contournement sur Google Code qui a fonctionné pour moi:
http://code.google.com/p/download-data-uri/
Il ajoute un formulaire avec les données qu'il contient, le soumet, puis supprime à nouveau le formulaire. Hacky, mais il a fait le travail pour moi. Nécessite jQuery.
Ce fil est apparu dans Google avant la page de code Google et j'ai pensé qu'il pourrait être utile d'avoir le lien ici aussi.
la source
data:...
URI, ce script crée un formulaire pour le POSTER sur le serveur. Et le serveur se fait alors probablement l'écho directement en tant que réponse de "téléchargement" HTTP (c'est-à-dire avec un en-tête Content-Disposition approprié spécifiant le nom de fichier).Voici une version jQuery basée sur la version de Holf et 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 le faire, mais si quelqu'un a une meilleure option, je suis tout à fait d'accord.
la source
$().appendTo()
à une variable puis en appelantvariable.click(); variable.remove()
[0]
de n'importe quel "élément jQuery" devrait renvoyer le premier élément DOM qu'il représente, ce qui "vous fait sortir" de jQuery.C'est un peu hackish, mais j'ai déjà été dans la même situation. Je générais dynamiquement un fichier texte en javascript et je voulais le fournir en téléchargement en le codant avec l'URI de données.
Cela est possible avec une intervention
mineuremajeure de l'utilisateur. Générer un lien<a href="data:...">right-click me and select "Save Link As..." and save as "example.txt"</a>
. Comme je l'ai dit, cela n'est pas élégant, mais cela fonctionne si vous n'avez pas besoin d'une solution professionnelle.Cela pourrait être rendu moins douloureux en utilisant Flash pour copier le nom dans le presse-papiers en premier. Bien sûr, si vous vous permettez d'utiliser Flash ou Java (maintenant avec de moins en moins de support de navigateur je pense?), Vous pourriez probablement trouver une autre façon de le faire.
la source
download
pour suggérer un nom comme mentionné par de nombreuses autres réponses .Celui-ci fonctionne avec Firefox 43.0 (ancien non testé):
dl.js:
dl.html
Si le bouton est cliqué, il propose un fichier nommé hello.bin à télécharger. L'astuce consiste à utiliser File au lieu de Blob .
référence: https://developer.mozilla.org/de/docs/Web/API/File
la source
la source
Vous pouvez réellement y parvenir, dans Chrome et FireFox.
Essayez l'url suivante, elle téléchargera le code qui a été utilisé.
la source