Télécharger PDF

Résolu
Kopernicus -  
 Mouradif -
Bonsoir,
Voil@, sur mon site, je souhaite faire télécharger des fichiers pdf. Quand on clique sur le lien, le fichier s'ouvre ds Acrobat Reader. Comment faire pour empêcher celui-ci de s'ouvrir avc le fichier et forcer l'affichage de la traditionnelle fenêtre de téléchargement du navigateur ?
A vos idées, merci.
@@@

18 réponses

  1. Bobinours Messages postés 2903 Statut Membre 504
     
    Arf, justement on parle de moi ;-)

    Eaulive, c'est effectivement une configuration du navigateur, mais cela peut être forcé grace à l'entête HTTP.

    Kopernicus : Ce n'est pas très compliqué si tu utilises un langage serveur. Voici comment faire avec PHP : http://www.php.net/manual/fr/function.header.php

    <?php
    header("Content-type: application/pdf");
    header("Content-Disposition: attachment; filename=downloaded.pdf");

    /* ... output pdf file ... */
    ?>

    En gros, il te faut faire un lien vers un fichier PHP qui envera un entête HTTP approprié à l'aide de la fonction HEADER() et dans lequel on ouvrira le fichier PDF et on PRINTera son contenu.

    Le nom du fichier pourra être mis en paramètres du fichier d'URL pour rendre générique.
    (Attention ! Dans ce cas il faut sécuriser pour ne par qu'on puisse télécharger n'importe quel fichier comme un fichier PHP ou un fichier avec des mots de passe...).

    -= Bobinours - http://bobin.underlands.org =-
    1
    1. Mouradif
       
      Concernant la sécurité, le mieux est d'avoir soir une table dans la bdd soit un array qui recense les fichiers téléchargeables pour pouvoir faire un lien du style
      <a href="telecharger.php?id=2">
      

      dans le cas de Bases de données, il faudra donc dans "telecharger.php" récupérer le nom du fichier d'id $_GET['id'] (ici 2) pour l'utiliser dans header().

      pour ce qui est des array, un truc du style
      $pdf = array ( 
      	"fichier1.pdf",
      	"fichier2.pdf",
      	...
      	)
      

      devrait suffire. Ensuite dans "telecharger.php" :
      $id = $_GET['id'];
      $filename = $pdf[$id];
      

      Désolé pour le manque d'explications, c'est juste que je suis un peu pressé :p. Si vous trouvez que ce n'est pas assez explicite, envoyez moi un mp
      0
  2. Eaulive Messages postés 27403 Date d'inscription   Statut Modérateur Dernière intervention   294
     
    À moins que je ne me gourge, ce sont les propriétés de ton navigateur qu'il faut revoir. Dans mon cas avec IE6, le document .pdf s'affiche dans la fenêtre de mon navigateur car acrobat reader est pris en charge par IE (ou l'inverse ;-), mais avec NS7, j'ai une fenêtre acrobat qui s'ouvre à part.

    SLU ;-)

    Si tu n'es pas sûr de comprendre la réponse,
    ne pose pas la question...
    Eaulive.
    0
  3. ipl Messages postés 5738 Statut Contributeur sécurité 585
     
    Bonjour Kopernicus, Eaulive, bonjour à tous,

    Eaulive, si j'ai bien compris, Kopernicus ne veux pas que le pdf ouvre une fenêtre Acrobat Reader, ni dans IE ni à part, il voudrait, dans son cas, faire ouvrir la boîte de téléchargement.

    Kopernicus, ta question m'interesse mais je ne sais pas répondre.. à part un clic droit et "enregistrer la cible sous..." ou enregistrer au format .zip.

    @12C4
    Ipl
    0
  4. Eaulive Messages postés 27403 Date d'inscription   Statut Modérateur Dernière intervention   294
     
    Bonjour à vous deux.

    Tu as raison Gérard, il était tard et j'avais mal compris ;-)

    Pour la solution je n'en vois pas d'autre non plus pour l'instant.

    Si tu n'es pas sûr de comprendre la réponse,
    ne pose pas la question...
    Eaulive.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ipl Messages postés 5738 Statut Contributeur sécurité 585
     
    Rebonsoir à tous,

    Enfin CCM en ligne ! :-)

    @12C4
    Ipl
    0
  7. Eaulive Messages postés 27403 Date d'inscription   Statut Modérateur Dernière intervention   294
     
    Ah bon, il était tombé???

    Je viens juste d'arriver ;-)

    Si tu n'es pas sûr de comprendre la réponse,
    ne pose pas la question...
    Eaulive.
    0
  8. ipl Messages postés 5738 Statut Contributeur sécurité 585
     
    Hello Eaulive,

    Oui CCM est tombé entre 9h30 et 18h :-(

    @12C4
    Ipl
    0
  9. Kopernicus
     
    Bonjour à Eaulive, ipl et les autres
    En effet, je ne souhaite pas que Acrobat s'ouvre. Mais je ne veux pas non plus recourir au clic droit car pas tjrs respecté. Je voulais aussi éviter la compression, mais apparemment il n'y a pas de solution pour empêcher ce Reader d'Acrobater. Donc je vais ziper.
    Merci à tous.
    @@@
    0
  10. ipl Messages postés 5738 Statut Contributeur sécurité 585
     
    Bonjour Kopernicus, bonjour à tous,

    Je me souviens (trop vaguement) d'un fil de discussion semblable sur All-Html au sujet de fichiers Word à télécharger et non à ouvrir dans l'app !
    Un membre (pilier) d'ALL-Html avait un programme développé par sa soc. qui faisait çà sans problème... çà c'était en fin 2001... je crois me souvenir que c'était un Canadien... il faudrait :
    -demander à Bobinours si çà lui rappelle quelque chose
    -faire quelques recherches sur le forum
    -reposer la question là-bas
    (j'avais aussi récupéré le programme sur mon disque dur, parmi les milliers d'autres prgrammes).

    Kopernicus... as-tu grand besoin de cette fonction ? veux-tu déclancher une "procédure plus lourde" (telle que décrite ci-dessus) ?

    @12C4
    Ipl
    0
  11. Kopernicus
     
    Bonjour à tous
    Je te remercie bcp ipl. Le pb ne se pose pas avc word : il ne s'execute pas avc les docs word, c'est la fenetre de téléchargement qui s'ouvre.
    En fait, je n'ai pas envie de me casser la tete avc ça, je n'ai que 3 docs pdf, donc je les ai zipés.
    Bonne année à tout le monde.
    @++
    0
  12. Kopernicus
     
    Bonjour;

    Je te remercie Bobinours. Malheureusement, je développe en ASP.
    N'y aurait-il pas simplement un paramètre à rajouter dans la ligne de commande ?

    @++
    0
  13. Kopernicus
     
    ... PS : Sebsauvage aurait peut-être une solution; il a une rubrique sur le sujet dans son site.

    @++
    0
  14. Bobinours Messages postés 2903 Statut Membre 504
     
    Je ne sais pas comment écrire dans le Header HTTP en ASP, mais c'est quasiment certain que c'est faisable. Pour le reste, le principe reste le même.

    -= Bobinours - http://bobin.underlands.org =-
    0
  15. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    me v'là. Bonne année à tous.

    Pour les PDF:

    En envoyant le type MIME application/pdf (ce qui devrait en principe être utilisé pour les PDF), tu ne sais pas à l'avance comment se comportera le navigateur de l'internaute (ouverture directe du PDF dans le navigateur ou sauvegarde).

    C'est pour cela qu'il est généralement préférable de choisir le type MIME application/octet-stream.
    La grande majorité des navigateurs proposera de sauvegarder le fichier.

    Et quand on ne peut pas avoir le contrôle des types MIME renvoyés par le serveur HTTP (ex: hébergeurs gratuits), mieux vaut le zipper (dans ce cas, la majorité des seveurs HTTP utilisent le type application/octet-stream, application/zip ou application/x-zip-compressed).
    0
  16. Bobinours Messages postés 2903 Statut Membre 504
     
    Salut sebsauvage,
    Je ne suis pas tout à fait d'accord avec toi.

    "application/octet-stream" est utilisé pour les fichiers dont on ne connait pas le format (à défaut d'être un flot de données).
    Sous Mozilla, les fichier octet-steram sont enregistrés sans extension.

    Alors qu'il existe le "Content-Disposition" prévu à cet effet ;-)

    -= Bobinours - http://bobin.underlands.org =-
    0
    1. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
       
      Autant pour moi !
      Je n'ai jamais lu la RFC jusqu'au bout :-.
      0
    2. Bobinours Messages postés 2903 Statut Membre 504
       
      Je te rassure, moi non plus ;-)

      -= Bobinours - http://bobin.underlands.org =-
      0
  17. Kopernicus
     
    Bonjour à tous,

    Pour info, voici une réponse que j'ai eue dans un autre forum (solution en-tête en asp) :

    Response.AddHeader "content-disposition","attachment; filename=tonfichier.pdf"

    NB : je n'ai pas vérifié...
    Bonne journée.
    @++
    0
  18. Bobinours Messages postés 2903 Statut Membre 504
     
    Je préfère nettement ça, kopernicus, qui semble correspondre à la notation que j'indiquais en PHP.

    -= Bobinours - http://bobin.underlands.org =-
    0
  19. gio
     
    je suis tomber dessus par hazard et moi aussi j'en ai ch... avec les plugins senser nous faciliter la vie...

    voici un script php...

    +++++++++++++++++++++
    <?php

    $file = $_GET["file"];
    download($file);
    function download($file, $name = false, $type = false, $down = true) {
    if(!file_exists($file)){
    print "error";
    exit;
    }
    if(!$name) $name = basename($file);
    if($down) $type = "application/force-download";
    else if(!$type) $type = "application/download";
    $disp = $down ? "attachment" : "inline";
    #header ("HTTP/1.0 204 No Content" );
    header("Content-disposition: ".$disp."; filename=$name");
    header("Content-length: ".filesize($file));
    header("Content-type: ".$type);
    header("Connection: close");
    header("Expires: 0");

    readfile($file);
    exit;
    }
    ?>
    ++++++++++++++++++++++++++

    ca marche avec toutes les extensions

    pour le faire fonctionner

    http://www.monsite.com/download.php?file=monfichier.pdf

    voilou....

    a+ gio
    0
    1. riri974
       
      je me suis permis de reprendre ton code et de rajoute une sécurité :

      <?php
      if(($_GET['type']=='pdf')||($_GET['type']=='zip'))
      {
      $file ="./".$_GET['file'].".".$_GET['type'];
      download($file);
      }
      else
      exit("type de fichier interdit");


      function download($file, $name = false, $type = false, $down = true)
      {
      if(!file_exists($file)){
      print "error";
      exit;
      }
      if(!$name) $name = basename($file);
      if($down) $type = "application/force-download";
      else if(!$type) $type = "application/download";
      $disp = $down ? "attachment" : "inline";
      #header ("HTTP/1.0 204 No Content" );
      header("Content-disposition: ".$disp."; filename=$name");
      header("Content-length: ".filesize($file));
      header("Content-type: ".$type);
      header("Connection: close");
      header("Expires: 0");

      readfile($file);
      exit;
      }
      ?>
      0