Forcer le download d'un lien

Forcer le download d'un lien - HTML/CSS - Programmation

Marsh Posté le 20-09-2005 à 09:02:10    

        Bonjour à tous,
 
Dans une page HTML, j'ai un lien vers un fichier csv.
 
Selon les navigateurs, lors du clic sur ce lien, le fichier s'ouvre directement dans la page (IE reconnait le format Excel) ou lance une fenetre 'enregistrement sous'.
 
Je souhaiterai en fait, forcer ma page à vouloir télécharger ce fichier et non à l'ouvrir.
 
Comment puis-je procéder sans utiliser l'option '<a target="_blank">'.
 
                       Joey.

Reply

Marsh Posté le 20-09-2005 à 09:02:10   

Reply

Marsh Posté le 20-09-2005 à 10:20:27    

Personne n'est apte à m'aider ???

Reply

Marsh Posté le 20-09-2005 à 10:27:04    

J'ai trouvé des solutions, mais le problème, c'est qu'il s'agit que de solutions en PHP :
 
function ForceFileDownload($file){
    $filesize = @filesize($file);
    header("Content-Disposition: attachment; filename=".$file);
    header("Content-Type: application/octet-stream" );
    header("Content-Type: application/force-download" );
    header("Content-Type: application/download" );
    header("Content-Transfer-Encoding: binary" );
    header("Pragma:no-cache" );
    header("Expires:0" );
    @set_time_limit(600);
    readfile($file);
}
 
Et je ne souhaite pas utiliser de PHP.
 
Une solution en javascript me convient par contre.

Reply

Marsh Posté le 20-09-2005 à 10:32:26    

Tu sera bien obligé d'utiliser PHP (ou tout autre techno côté serveur) car c'est le serveur qui définit les headers et le navigateur client ne réagit que suivant les headers.
 

Reply

Marsh Posté le 20-09-2005 à 10:35:50    

Bidem a écrit :

Tu sera bien obligé d'utiliser PHP (ou tout autre techno côté serveur) car c'est le serveur qui définit les headers et le navigateur client ne réagit que suivant les headers.


Il peut aussi associer un MIME octet-stream à certains fichiers (genre *.csv) dans son httpd.conf :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-09-2005 à 10:44:20    

Ah, tu m'interresse.
 
Peux tu m'en dire un peux plus ?
 
J'vois dans le fichier http.conf qu'il y a :
 
#
# DefaultType is the default MIME type the server will use for a document
# if it cannot otherwise determine one, such as from filename extensions.
# If your server contains mostly text or HTML documents, "text/plain" is
# a good value.  If most of your content is binary, such as applications
# or images, you may want to use "application/octet-stream" instead to
# keep browsers from trying to display binary files as though they are
# text.
#
DefaultType text/plain
 
Faut-il que je modifie quelque chose ici ?

Reply

Marsh Posté le 20-09-2005 à 10:49:46    

Plus bas tu trouveras normalement quelques directives commençant par "AddType" (si tu les trouve pas, il y a sûrement un placeholder).
 
Là, tu ajoutes un truc du style

AddType application/octet-stream .csv


et Apache enverra tous les fichiers ".csv" avec un header "application/octet-stream" automatiquement.
 
Ce que tu as cité, c'est la définition du type MIME par défaut (quand le type de fichier ne figure pas dans les types connus par Apache)


Message édité par masklinn le 20-09-2005 à 10:50:41

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-09-2005 à 10:54:46    

Quand tu dis :
"Apache enverra tous les fichiers ".csv" avec un header "application/octet-stream" automatiquement"
 
C'est à dire, qu'il ne tentera pas d'ouvrir mon fichier dans la page actuel mais bien forcer l'option 'enregistrer sous' ???
 
Désolé d'être redonnant, c'ets pour être sur.

Reply

Marsh Posté le 20-09-2005 à 11:00:48    

http://cyber.law.harvard.edu/blogs/static/dowbrigade/oui.jpg


Message édité par gatsusat le 20-09-2005 à 11:01:48
Reply

Marsh Posté le 20-09-2005 à 11:01:23    

Bon ben désolé de te dire que ca ne fonctionne pas...
 
Il m'affiche tout de même mon fichier à l'écran...

Reply

Marsh Posté le 20-09-2005 à 11:01:23   

Reply

Marsh Posté le 20-09-2005 à 11:07:22    

T'as pensé à relancer apache? [:kiki]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-09-2005 à 11:29:10    

Nan nan, bien sur que oui...

Reply

Marsh Posté le 20-09-2005 à 11:52:37    

Alors tu ne vois pas d'autres soluces ?

Reply

Marsh Posté le 20-09-2005 à 15:26:23    

On sait faire des choses de dingue en programmation et le simple fait de vouloir ouvrir un fichier en mode 'enregistrer sous' sans utiliser le php nous procure autant de problème ???
 
                                 VIVE L'INFORMATIQUE ! ! !

Reply

Marsh Posté le 20-09-2005 à 15:48:08    

C'est pas par ce qu'on est des programmeur plus ou moins bon (et trés bon pour certain) qu'on est capable de modifier le navigateur du client sans son consentement.
Il y a des limites à tout et là les limites, c'est le comportement du navigateur et IE à la facheuse habitude de chercher à analyser ce qu'on lui envoie sans faire confiance à 100% à ce qu'on lui dit et pire, il réagit pas toujours pareil en fonction des sous versions.
 
PS : Si ca marche pas, pleins toi à microsoft. ;)


Message édité par omega2 le 20-09-2005 à 15:48:59
Reply

Marsh Posté le 20-09-2005 à 15:52:36    

joey_joe a écrit :

On sait faire des choses de dingue en programmation et le simple fait de vouloir ouvrir un fichier en mode 'enregistrer sous' sans utiliser le php nous procure autant de problème ???
 
                                 VIVE L'INFORMATIQUE ! ! !


T'as essayé avec Opera ou Firefox [:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-09-2005 à 16:47:22    

La méthode a utiliser est celle la : <a href="tonfichier_a_telecharger" type="octet-stream">Telecharger</a>
 
Cependant IE ne tient pas compte du type specifié par le developpeur ... la seule solution c'est donc d'utiliser un script serveur qui envoie l'en-tete content-type qui va bien (octet-stream) au navigateur.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed