Je me demandais comment rendre un lien de fichier PDF téléchargeable au lieu de les ouvrir dans le navigateur? Comment cela se fait-il en html? (Je suppose que c'est fait via javascript ou quelque chose).
javascript
html
404Erreur
la source
la source
Réponses:
Vous ne pouvez pas faire cela avec HTML. C'est une solution basée sur un serveur. Vous devez diffuser le fichier pour que le navigateur déclenche la boîte de dialogue d'enregistrement.
Je conseillerais de ne pas faire cela. La façon dont un utilisateur interagit avec un PDF doit être laissée à l'utilisateur.
MISE À JOUR (2014):
Donc ... cette réponse reçoit encore beaucoup de votes négatifs. Je suppose qu'une partie de cela est que cela a été répondu il y a 4 ans et comme le souligne Sarim, il y a maintenant l' attribut HTML 5
download
qui peut gérer cela.Je suis d'accord, et je pense que la réponse de Sarim est bonne (elle devrait probablement être la réponse choisie si le PO revient un jour). Cependant, cette réponse reste le moyen fiable de la gérer (comme le souligne la réponse de Yiğit Yener et - curieusement - les gens sont d'accord). Bien que l'attribut de téléchargement soit pris en charge, il est toujours irrégulier:
http://caniuse.com/#feat=download
la source
http
balise à la question. Au lieu du paragraphe 2: "Vous voudrez peut-être reconsidérer si empêcher la visualisation immédiate du PDF est dans le meilleur intérêt de tous les utilisateurs. Cela dit ..." Alors supposez que le PO et les futurs lecteurs sont des adultes et passez à une réponse concrète telle que celle de Yener .Avec html5, c'est désormais possible. Définissez un attr "téléchargement" dans l'élément.
Source: http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download
la source
if ("download" in document.createElement("a")){ ... }
Cela n'est possible qu'en définissant un en-tête de réponse http par le code côté serveur. À savoir;
la source
Vous devez modifier les en-têtes http envoyés. En fonction de votre serveur, vous pouvez modifier votre .htaccess comme suit:
la source
vous devrez utiliser un script PHP (ou un autre langage côté serveur pour cela)
et utilisez httacces pour rediriger (réécrire) vers le fichier PHP au lieu du pdf
la source
http://www.example.com/_PDFs/___download_the_catalogue_instead_opening.php
et essayer d'ouvrir le fichier pdf, il ouvre toujours l'original dans le navigateur, téléchargeant à la place la version renommée ...Vous pouvez utiliser
Regardez cet exemple:
http://www.codeproject.com/KB/aspnet/textfile.aspx
Cela vaut pour ASP.NET. Je suis sûr que vous pouvez trouver des solutions similaires dans toutes les autres langues côté serveur. Cependant, il n'y a pas de solution javascript à ma connaissance.
la source
Sans attribut html5, on peut y parvenir en utilisant php:
Créez un fichier php nommé download.php avec ce code:
Maintenant, si vous souhaitez démarrer automatiquement le téléchargement de pdf, écrivez ce javascript:
Si vous voulez que cela fonctionne sur un lien, utilisez ceci ...
la source
$file = $_GET['$file'];
. Parce qu'on pourrait alors aussi appelerdownload.php?file=../../../wp-config.php
ou toute autre ressource donnée. Il est très important de vérifier les extensions, les types mime et les chemins autorisés à télécharger (et supprimer des éléments comme "../")!<a href='download.php'> ?
Lorsque vous souhaitez télécharger directement une image ou un fichier pdf à partir du navigateur au lieu de l'ouvrir dans un nouvel onglet, vous devez définir la valeur en javascript pour télécharger l'attribut de création de lien dynamique
Pour la nouvelle mise à jour de Chrome, un événement temporel ne fonctionne pas. pour que le code suivant soit utilisé
L'ajout d'un enfant et la suppression d'un enfant sont utiles pour Firefox, navigateur Internet Explorer uniquement. Sur Chrome, cela fonctionnera sans ajouter ni supprimer l'enfant
la source
La solution qui fonctionnait le mieux pour moi était celle rédigée par Nick sur son blog
L'idée de base de sa solution est d'utiliser le mod d'en-tête des serveurs Apache et de modifier le .htaccess pour inclure une directive FileMatch qui force tous les fichiers * .pdf à agir comme un flux au lieu d'une pièce jointe. Bien que cela n'implique pas réellement d'éditer du HTML (selon la question originale), cela ne nécessite aucune programmation en soi.
La première raison pour laquelle j'ai préféré l'approche de Nick est qu'elle m'a permis de le définir par dossier afin que les fichiers PDF dans un dossier puissent toujours être ouverts dans le navigateur tout en permettant à d'autres (ceux que nous aimerions que les utilisateurs modifient puis retéléchargent) d'être forcé en tant que téléchargements.
Je voudrais également ajouter qu'il existe une option avec les PDF pour publier / soumettre des formulaires à remplir via une API à vos serveurs, mais cela prend du temps à mettre en œuvre.
La deuxième raison était que le temps est une considération. L'écriture d'un gestionnaire de fichiers PHP pour forcer la disposition du contenu dans l'en-tête () prendra également moins de temps qu'une API, mais toujours plus longue que l'approche de Nick.
Si vous savez comment activer un mod Apache et modifier le .htaccss, vous pouvez l'obtenir en 10 minutes environ. Il nécessite un hébergement Linux (pas Windows). Cette approche peut ne pas être appropriée pour toutes les utilisations car la configuration nécessite un accès serveur de haut niveau. En tant que tel, si vous avez dit accès, c'est probablement parce que vous savez déjà comment faire ces deux choses. Sinon, consultez le blog de Nick pour plus d'instructions.
la source
Comme la méthode html5 (ma réponse précédente) n'est pas disponible dans tous les navigateurs, voici une autre façon légèrement hack.
Cette solution nécessite que vous diffusiez le fichier prévu à partir du même domaine, OU que vous disposiez de l'autorisation CORS.
application/octet-stream
. Le résultat devrait ressembler àdata:application/octet-stream;base64,SGVsbG8sIFdvcmxkIQ%3D%3D
Maintenant prêt
location.href = data
. Cela amènera le navigateur à télécharger le fichier. Malheureusement, vous ne pouvez pas définir le nom ou l'extension du fichier de cette façon. Jouer avec le type de média pourrait donner quelque chose.Voir les détails: https://developer.mozilla.org/en-US/docs/Web/HTTP/data_URIs
la source
J'avais besoin de le faire pour les fichiers créés avec des noms dynamiques dans un dossier particulier et servis par IIS.
Cela a fonctionné pour moi:
Ajoutez un nouvel en-tête avec les informations suivantes:
Name: content-disposition Value: attachment
(à partir de: http://forums.iis.net/t/1175103.aspx?add+CustomHeaders+only+for+certain+file+types+ )
la source
Si vous utilisez HTML5 (et je suppose que maintenant, tout le monde l'utilise), il y a un attribut appelé
download
.ex.
<a href="somepathto.pdf" download="filename">
ici
filename
est facultatif, mais s'il est fourni, il prendra ce nom pour le fichier téléchargé.la source
<a href="download/Curriculum_it.pdf.zip">Download curriculum</a>
ou cela:<a href="download/Curriculum_it.pdf.zip" download="Curriculum_it">Download curriculum</a>
et je ne vois absolument aucune différence dans la façon dont cela fonctionne. Les deux téléchargeant mon .zip. Et dans le second, l'utilisation de l'option filename semble ne rien faire du tout.Le comportement doit dépendre de la configuration du navigateur pour gérer divers types MIME. Dans ce cas, le type MIME est application / pdf. Si vous souhaitez forcer le navigateur à télécharger le fichier, vous pouvez essayer de forcer un type MIME différent sur les fichiers PDF. Je déconseille cela, car les utilisateurs doivent choisir ce qui se passera lorsqu'ils ouvriront un fichier PDF.
la source
Vous pouvez utiliser download.js ( https://github.com/rndme/download et http://danml.com/download.html ). Si le fichier est dans une URL externe, vous devez faire une requête Ajax, mais si ce n'est pas le cas, vous pouvez utiliser la fonction:
Lisez leur documentation pour plus de détails dans le GitHub.
la source
Enfin j'ai trouvé ...... créer une balise d'ancrage dynamique et cliquer dessus
«Payment.pdf» est uniquement pour le nom personnalisé.
la source