Télécharger le fichier en utilisant jQuery

Comment puis-je demander un téléchargement pour un utilisateur lorsqu’il clique sur un lien?

Par exemple, au lieu de:

Download Here 

Je pourrais utiliser:

 Download Here $('a').click... //Some jquery to download the file 

De cette façon, Google n’indexe pas les fichiers HREF et les fichiers privés.

Est-ce que cela peut être fait avec jQuery, si oui, comment? Ou devrait-il être fait avec PHP ou quelque chose à la place?

Je pourrais suggérer cela, en tant que solution dégradante plus gracieuse, en utilisant preventDefault :

 $('a').click(function(e) { e.preventDefault(); //stop the browser from following window.location.href = 'https://stackoverflow.com/questions/1296085/download-file-using-jquery/uploads/file.doc'; }); Download now! 

Même s’il n’y a pas de Javascript, au moins, l’utilisateur obtiendra des commentaires.

Si vous ne souhaitez pas que les moteurs de recherche indexent certains fichiers, vous pouvez utiliser le fichier robots.txt pour indiquer aux web spiders de ne pas accéder à certaines parties de votre site Web.

Si vous ne comptez que sur JavaScript, certains utilisateurs qui naviguent sans lui ne pourront pas cliquer sur vos liens.

Voici un article intéressant qui montre de nombreuses façons de cacher des fichiers aux moteurs de recherche:

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

JavaScript n’est pas un bon moyen de ne pas indexer une page; cela n’empêchera pas les utilisateurs de se connecter directement à vos fichiers (et donc de les révéler aux robots), et comme Rob l’a mentionné, cela ne fonctionnerait pas pour tous les utilisateurs.
Une solution simple consiste à append l’ rel="nofollow" , mais là encore, ce n’est pas complet sans robots.txt.

 Download Here 

Oui, vous devrez remplacer window.location.href par l’URL du fichier que vous souhaitez télécharger.

 window.location.href = 'http://www.com/path/to/file'; 

En indiquant window.location.href = 'https://stackoverflow.com/questions/1296085/download-file-using-jquery/uploads/file.doc'; vous montrez où vous stockez vos fichiers. Vous pourriez bien sûr utiliser .htacess pour forcer le comportement requirejs pour les fichiers stockés, mais cela ne sera peut-être pas toujours très utile …

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 renvoie N’IMPORTE QUEL fichier en téléchargement sans montrer 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(); 

Les iframes cachés peuvent aider

Je vous suggère d’utiliser l’événement mousedown, qui s’appelle AVANT l’événement click. De cette manière, le navigateur gère naturellement l’événement click, ce qui évite toute étrangeté 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); 
  • Utiliser la fonction jQuery

      var valFileDownloadPath = 'http//:'+'your url'; window.open(valFileDownloadPath , '_blank'); 

Voir ici pour un article similaire sur l’utilisation de jQuery pour effacer les formulaires: Réinitialisation d’un formulaire à plusieurs étapes avec jQuery

Vous pouvez également rencontrer un problème où les valeurs sont repeuplées par la stack de valeurs struts. En d’autres termes, vous soumettez votre formulaire, faites ce que vous voulez dans la classe d’action, mais n’effacez pas les valeurs de champ associées dans la classe d’action. Dans ce scénario, le formulaire semble conserver les valeurs précédemment soumises. Si vous les persistez d’une certaine manière, annulez simplement chaque valeur de champ dans votre classe d’action après avoir persisté et avant de renvoyer SUCCESS.