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?

98
demandé sur RedBlueThing 2009-08-18 23:48:01

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.

143
répondu karim79 2009-08-20 02:33:08

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.

22
répondu Rob 2009-08-18 19:54:29

voici un bel article qui montre de nombreuses façons de cacher des fichiers des moteurs de recherche:

http://antezeta.com/news/avoid-search-engine-indexing

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>
17
répondu Kobi 2012-09-04 07:08:12

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';
11
répondu MacAnthony 2009-08-18 19:51:18

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';

6
répondu Otvazhnii 2014-07-31 20:44:40
 var link=document.createElement('a');
 document.body.appendChild(link);
 link.href=url;
 link.click();
6
répondu EL missaoui habib 2016-06-28 13:40:31
3
répondu letronje 2017-05-23 12:26:10

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);
2
répondu ling 2014-10-18 19:22:48
  • utilisant la fonction jQuery

        var valFileDownloadPath = 'http//:'+'your url';
    
       window.open(valFileDownloadPath , '_blank');
    
2
répondu Ganganath Rathnasekara 2017-08-17 09:57:54

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.

0
répondu Russell Shingleton 2017-05-23 11:54:53