Comment puis-je demander un téléchargement à un utilisateur lorsqu'il clique 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.
Cela peut-il être fait avec jQuery, si oui, comment? Ou cela devrait-il être fait avec PHP ou quelque chose à la place?
Je pourrais suggérer ceci, en tant que solution plus dégradante, 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 des commentaires.
Si vous ne voulez pas que les moteurs de recherche indexent certains fichiers, vous pouvez utiliser robots.txt pour dire aux internautes de ne pas accéder à certaines parties de votre site Web.
Si vous utilisez uniquement le javascript, certains utilisateurs qui naviguent sans lui ne pourront pas cliquer sur vos liens.
Voici un bel article qui montre de nombreuses façons de cacher des fichiers aux moteurs de recherche:
JavaScript n'est pas un bon moyen de ne pas indexer une page; cela n'empêchera pas les utilisateurs de créer des liens directs avec vos fichiers (et donc de les révéler aux robots d'exploration) et, comme l'a mentionné Rob, cela ne fonctionnerait pas pour tous les utilisateurs.
Une solution facile consiste à ajouter l'attribut rel="nofollow"
, bien que là encore, il ne soit pas complet sans le fichier robots.txt.
<a href="uploads/file.doc" rel="nofollow">Download Here</a>
Oui, vous devrez changer le window.location.href à l'URL du fichier que vous voulez télécharger.
window.location.href = 'http://www.com/path/to/file';
var link=document.createElement('a');
document.body.appendChild(link);
link.href=url;
link.click();
En indiquant window.location.href = 'uploads/file.doc';
, vous indiquez où vous stockez vos fichiers. Vous pouvez bien sûr utiliser .htacess pour forcer le comportement requis pour les fichiers stockés, mais cela peut 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 renverra TOUS les fichiers sous forme de téléchargement sans indiquer l'endroit où vous les stockez.
Vous ouvrez ce fichier php via window.location.href = 'scripts/this_php_file.php?f=downloaded_file';
Utilisation de la fonction jQuery
var valFileDownloadPath = 'http//:'+'your url';
window.open(valFileDownloadPath , '_blank');
Iframes cachés peut aider
Je vous suggère d'utiliser l'événement mousedown, appelé avant l'événement click. De cette façon, le navigateur gère l'événement click 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);
Voir ici pour un article similaire sur l'utilisation de jQuery pour effacer des formulaires: Réinitialisation d'un formulaire à plusieurs étapes avec jQuery
Vous pouvez également rencontrer un problème où les valeurs sont remplies par la pile de valeurs struts. En d'autres termes, vous soumettez votre formulaire, vous faites n'importe quoi dans la classe d'action, mais vous n'effacez pas les valeurs de champ associées dans la classe d'action. Dans ce scénario, le formulaire semble conserver les valeurs que vous avez précédemment soumises. Si vous les persistez d'une manière ou d'une autre, annulez simplement chaque valeur de champ dans votre classe d'action après avoir persisté et avant de renvoyer SUCCESS.