Aller au contenu

Créer un lien de téléchargement au-lieu d'ouvrir


ggbce

Messages recommandés

Salut,

Je cherche une méthode qui force le téléchargement au-lieu de l'ouverture d'un fichier (si le navigateur IE reconnait le format de ce fichier).

Exemple: Si le fichier est un PDF, un TXT ou une extension ??? mais reconnu comme un codage texte d'empêcher l'ouverture immédiate du fichier lorsque la personne clique sur le lien. Normallement un PDF sera ouvert avec Acrobat Reader directement depuis IE.

Je veux que la personne obtienne une fenêtre OUVRIR, ENREGISTRER, ANNULER comme tout autre fichier (.ZIP, .EXE, etc.).

Je sais que c'est possible puisque certains sites le font, par exemple Hotmail lorsque tu as un fichier en attachement, quand même que ce sera un PDF, un texte, un vidéo, etc. tu auras une fenêtre pour télécharger le fichier et pas une ouverture immédiate sans demande.

Un petit exemple de code HTML, PHP ou JS (je sais pas comment ils font) serait le bienvenue.

Lien vers le commentaire
Partager sur d’autres sites

As-tu effectué quelques recherches ?

C'est quand même toujours mieux de donner la réponse plutôt que de balancer Google.. :chinois:

En fait, faut changer le Content-type du fichier à télécharger.

Pour ça, un petit script php va se charger de lire le fichier et d'en balancer le contenu dans un flux d'octet:

$filedir = "../mydirectory/";
$filename = "monfichier.txt";
header("Content-disposition: attachment; filename=$filename"); //Pour indiquer le nom du fichier côté client
header("Content-Type: application/force-download"); //Force le téléchargement
header("Content-Length: ".filesize($filedir.$filename)); //Pour indiquer la taille du fichier, permet au navigateur d'évaluer le temps de téléchargement

readfile($filedir.$filename); //On lit le fichier et on balance tout dans le flux

Il est même possible d'initialiser le téléchargement de plusieurs fichiers les uns derriere les autres avec ça :

header('Content-type: multipart/x-mixed-replace;boundary="endofsection"'); //Indique le fichier est en plusieurs morceaux (multipart)
echo "--endofsection\n"; //Séparateur
flush(); // Permet de balancer la sauce dans le tuyau tout de suite, sans attendre la fin du script
echo "--endofsection--\n"; //Terminaison du fichier

Ensuite, suffit de bourriner ce qu'il y à au dessus entre des "--endofsection\n" et d'ajouter la terminaison du fichier à la fin. Et là t'as plusieurs fenêtre qui proposent de dl. Je conseille de les séparer avec un petit sleep(2).

Voilà,

A+

Lien vers le commentaire
Partager sur d’autres sites

Évidemment que j'ai fais des recherches Quarky :francais:

J'avais trouvé quelques scripts, surtout en ASP plutôt qu'en PHP... et le plupart contenait près d'une centaines de lignes. Je ne trouvais pas ça très optimisé et j'étais à peu près certain qu'il y avait mieux, et il me fallait une autre solution puisque je ne supporte pas le ASP avec mon serveur. Donc c'était en JavaScript ou en PHP.

J'ai trouvé quelques exemples en JavaScript, mais certains fonctionne uniquement avec IE6, d'autre uniquement avec IE5 ou encore d'autre qui parviennent à différents résultats pas très efficace...

Le seule code que j'ai trouvé pour le moment est en JavaScript, et il ne fait pas "propre". Il me permet effectivement de télécharger au-lieu d'ouvrir directement sans pré-avis, mais il ne m'arrive pas sur la fenêtre standard du "Ouvrir, Enregistrer ou Annuler" d'IE. J'obtiens une fenêtre immédiatement pour spécifier le dossier de destination et la fenêtre donne l'impression à l'utilisateur que le fichier est de type HTML (quand même qu'il serait TXT, PDF, ZIP, etc...) c'est écrit "Enregistrement du fichier HTML..."

Merci pour ta réponse Choub, je vais l'essayer dès que possible !

Lien vers le commentaire
Partager sur d’autres sites

J'ai oublié de préciser une chose importante, c'est que le script php doit être lancé comme un lien.

Imaginons que le nom du script est monscript.php, il suffit alors de créer un lien dans ta page html (ou php) vers ce script, comme ceci :

<a href="monscript.php">Télécharger le fichier</a>

Après, tu peux améliorer le script en lui passant le nom du fichier à télécharger, comme ceci:

<a href="monscript.php?filename=mon_fichier_a_telecharger">Télécharger le fichier</a>

Et ensuite tu récupère le nom dans le script php avec un bête $_GET["filename"].

Sans oublier de faire les test nécéssaire pour éviter que ce script permette de télécharger n'importe quel fichier (notamment les fichiers de script) en bloquant à un seul répertoire possible (le répertoire où sont stocké les fichiers téléchargeable). Mais ceci est un autre problème.

Allez, a+

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...