Comment déclencher le téléchargement d'un fichier en cliquant sur un bouton HTML ou JavaScript
C'est fou, mais je ne sais pas comment faire cela, et en raison de la façon commune les mots sont, il est difficile de trouver ce dont j'ai besoin sur les moteurs de recherche. Je suis en train de penser cela devrait être une question facile à répondre.
Je veux un simple téléchargement de fichier, qui ferait la même chose comme ceci:
<a href="file.doc">Download!</a>
Mais je veux utiliser un bouton HTML, par exemple, l'un de ces:
<input type="button" value="Download!">
<button>Download!</button>
De même, est-il possible de déclencher un simple téléchargement via JavaScript?
$("#fileRequest").click(function(){ /* code to download? */ });
Je suis certainement pas la recherche d'un moyen pour créer un point d'ancrage qui ressemble à un bouton, utilisez n'importe quel back-end de scripts ou de dégât avec le serveur des en-têtes ou des types mime.
- C'est faux parce que la bible dit que c'est un péché. 😉 Et parce que je veux simplement utiliser un bouton HTML, et je n'ai pas peur d'apprendre quelque chose de nouveau.
- Grâce à vous "comment déclencher le téléchargement d'un fichier en javascript" permettrait de donner des réponses beaucoup plus rapide pour le futur chercheur.
Vous devez vous connecter pour publier un commentaire.
Pour le bouton que vous pouvez faire
Not allowed to load local resource
que pouvons-nous faire avec cette erreur?Vous pouvez déclencher un téléchargement avec le HTML5
download
attribut.Où:
path_to_file
est un chemin qui correspond à une URL sur le même origine. Cela signifie que la page et le fichier doit partager le même domaine, sous-domaine, le protocole HTTP (vs HTTPS), et le port (si spécifié). Les Exceptions sontblob:
etdonnées:
(qui travaille toujours), etfichier:
(qui ne fonctionne jamais).proposed_file_name
est le nom du fichier à sauvegarder. Si ce champ est vide, le navigateur par défaut le nom du fichier.Documentation: MDN, HTML Standard sur le téléchargement, HTML Standard sur
télécharger
, CanIUsedownload
ettarget="_blank"
semble être suffisant pour couvrir la plupart des cas d'utilisation. Les navigateurs qui comprennentdownload
le traiter comme un téléchargement, sinon c'est ouvert dans un nouvel onglet.HTML:
Avec jQuery:
Resource interpreted as Document but transferred with MIME type application/pdf
ou quel que soit le Type de Contenu est. C'est apparemment bénignes.Vieux thread mais il ne manque plus qu'un simple js solution:
Vous pouvez le faire avec le "truc" avec iframe invisible. Lorsque vous définissez "src" pour elle, navigateur réagit comme si vous cliquez sur un lien, avec la même "href". Comme opposé à la solution avec le formulaire, il vous permet d'intégrer une logique supplémentaire, par exemple l'activation de téléchargement après le délai d'attente, lorsque certaines conditions sont réunies, etc.
Il est également très silient, il n'y a pas de clignoter une nouvelle fenêtre/onglet comme lors de l'utilisation de
window.open
.HTML:
Javascript:
De Démarrage De La Version
Documenté dans le Bootstrap 4 docs, et travaille dans le Bootstrap 3.
Je pense que c'est la solution que vous recherchez
J'ai un cas où mon Javascript généré un fichier CSV. Puisqu'il n'est pas à distance de l'URL pour le télécharger j'utilise la suite de la mise en œuvre.
location.href
solutions.Ce sujet:
Vous pouvez masquer le lien de téléchargement et rendre le bouton sur lequel vous cliquez.
Si vous cherchez à la vanille, JavaScript (pas de jQuery) et de solution sans l'aide de l'attribut HTML5, vous pouvez essayer ce.
JS:
CSS:
HTML:
C'est ce qui a finalement fonctionné pour moi depuis le fichier à télécharger a été déterminé lorsque la page est chargée.
JS pour mettre à jour l'attribut action du formulaire:
Appel JS pour mettre à jour l'attribut action du formulaire:
Balise de formulaire avec le bouton soumettre:
Suivantes ne PAS travail:
Si vous ne pouvez pas utiliser le formulaire, une autre approche avec downloadjs ajustement de nice. Downloadjs utilisation blob et html 5 de fichiers de l'API sous le capot:
{downloadjs(url, nom de fichier)})/>
*c'est jsx/réagir la syntaxe, mais peut être utilisé en pur html
N'importe où entre votre
<body>
et</body>
les balises, les mettre dans un bouton à l'aide du code ci-dessous:C'est sûr que pour le travail!
télécharger attribut faire
Une autre façon de faire dans le cas où vous avez une URL complexe comme
file.doc?foo=bar&jon=doe
est d'ajouter un champ caché dans le formulaireinspiré sur @Cfreak réponse qui n'est pas complète
vous pouvez ajouter une balise sans texte, mais avec un lien. et lorsque vous cliquez sur le bouton que vous avez dans le code , il suffit d'exécuter le $("yourlinkclass").cliquez sur la (les) fonction.
Pour moi ading bouton à la place de l'ancre texte fonctionne vraiment bien.
Il pourrait ne pas être ok par la plupart des règles, mais il semble assez bon.
<a>
éléments peut ne pas contenir<button>
éléments.Si vous utilisez le
<a>
tag, n'oubliez pas d'utiliser la totalité de l'url qui mène au fichier -- c'est à dire: