Télécharger un fichier en utilisant jQuery
Comment puis-je inviter un téléchargement pour un utilisateur quand ils cliquent sur un lien.
par exemple, au lieu de:
<a href="uploads/file.doc">Download Here</a>
je pourrais utiliser:
<a href="#">Download Here</a>
$('a').click... //Some jquery to download the file
de cette façon, Google n'indexe pas mes fichiers HREF et privés.
peut-on le faire avec jQuery, si oui, comment? Ou cela devrait-il être fait avec PHP ou quelque chose à la place?
10 réponses
je pourrais suggérer ceci, comme une solution dégradante plus gracieusement, en utilisant preventDefault
:
$('a').click(function(e) {
e.preventDefault(); //stop the browser from following
window.location.href = 'uploads/file.doc';
});
<a href="no-script.html">Download now!</a>
même s'il n'y a pas de Javascript, au moins de cette façon l'utilisateur obtiendra quelques commentaires.
si vous ne voulez pas que les moteurs de recherche indexent certains fichiers, vous pouvez utiliser les robots .txt pour dire aux araignées web de ne pas accéder à certaines parties de votre site.
si vous vous fiez uniquement à javascript, alors certains utilisateurs qui naviguent sans lui ne seront pas en mesure de cliquer sur vos liens.
voici un bel article qui montre de nombreuses façons de cacher des fichiers des moteurs de recherche:
JavaScript n'est pas une bonne façon de ne pas indexer une page; il n'empêchera pas les utilisateurs de lier directement à vos fichiers (et donc de le révéler aux crawlers), et comme Rob mentionné, ne fonctionnerait pas pour tous les utilisateurs.
Une solution facile est d'ajouter l'attribut rel="nofollow"
, mais encore une fois, il n'est pas complet sans robots.txt.
<a href="uploads/file.doc" rel="nofollow">Download Here</a>
Oui, il faudrait changer la fenêtre.emplacement.href de l'url du fichier que vous souhaitez télécharger.
window.location.href = 'http://www.com/path/to/file';
en indiquant window.location.href = 'uploads/file.doc';
vous montrez où vous stockez vos fichiers. Vous pourriez bien sûr utiliser .htacess pour forcer le comportement requis pour les fichiers stockés, mais cela pourrait ne pas toujours être difficile....
il est préférable de créer un fichier php côté serveur et d'y placer ce contenu:
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$_REQUEST['f']);
readfile('../some_folder/some_subfolder/'.$_REQUEST['f']);
exit;
ce code retournera N'importe quel fichier en téléchargement sans indiquer où vous le stockez réellement.
vous ouvrez ce fichier php via window.location.href = 'scripts/this_php_file.php?f=downloaded_file';
var link=document.createElement('a');
document.body.appendChild(link);
link.href=url;
link.click();
je vous suggère d'utiliser l'événement mousedown, qui est appelé AVANT l'événement click. De cette façon, le navigateur gère l'événement de clic naturellement, ce qui évite toute bizarrerie de code:
(function ($) {
// with this solution, the browser handles the download link naturally (tested in chrome and firefox)
$(document).ready(function () {
var url = '/private/downloads/myfile123.pdf';
$("a").on('mousedown', function () {
$(this).attr("href", url);
});
});
})(jQuery);
-
utilisant la fonction jQuery
var valFileDownloadPath = 'http//:'+'your url'; window.open(valFileDownloadPath , '_blank');
voir ici pour un post similaire sur l'utilisation de jQuery pour effacer les formes: réinitialisation d'une forme multi-étapes avec jQuery
vous pouvez également être en train de courir dans un problème où les valeurs sont repeuplées par la pile de valeurs de struts. En d'autres termes, vous soumettez votre formulaire, faites n'importe quoi dans la classe d'action, mais ne clarifiez pas les valeurs de champ connexes dans la classe d'action. Dans ce scénario, la forme semble maintenir les valeurs précédemment soumis. Si vous les persistez d'une façon ou d'une autre, juste null chaque valeur de champ dans votre classe d'action après persisting et avant de retourner le succès.