JPG zeigen und download

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • JPG zeigen und download

    Hallo
    Ich möchte in meiner Bildergallery jpg Bilder zeigen und zum Download freigeben.
    Die rechte Maustaste ist absichtlich gesperrt.

    so sieht es aus......
    <a href="javascript:showbigimage('IM000387.JPG',640,480,'')">IM000387.JPG</a><br>
    gleich gehts los<br>
    [74 KB]
    <br>
    <a href="download.php?name=IM000387.jpg">Download IM000387.JPG</a><br>

    Leider zeigt die Download.php auch das Bild an,
    wie muss die Download.php aussehen das hier das Bild gedownloadet wird ???

    Die wichtigste Zeile aus Download.php....
    <?
    echo "<meta http-equiv=\"refresh\" content=\"1;URL=$name\">";
    ?>

    Bernd

  • #2
    z.b. so:
    Code:
        $query = "select bild, dateiart, dateiname from tabelle where id=$id";
        $result = @MYSQL_QUERY($query);
    
        $data = @MYSQL_RESULT($result,0,"bild");
        $type = @MYSQL_RESULT($result,0,"dateiart");
        $filename = @MYSQL_RESULT($result,0,"dateiname");
    
        Header( "Content-type: $type");
        Header("Content-Disposition: attachment; filename=$filename");
        echo $data;
    wichtig is halt der header("Content-Disposition: attachment; filename=$filename");

    damit zwingst du den browser die datei zu speichern statt anzuzeigen (bzw. den "speichern unter" dialog auszulösen.
    siehe auch http://www.zend.com/manual/function.header.php

    ganz unten stehts - samt link aufs rfc

    hope this helps,
    sonja


    [Editiert von WhiteMountain am 08-03-2002 um 23:17]

    Kommentar


    • #3
      oder so, ohne Datenbank:
      Code:
      # Pfad zum Verzeichnis der Bilder
      $basedir = "/home/www/bilder";
      
      $name = basename($name);
      $filename = sprintf("%s/%s", $basedir, $name);
      
      # Falsche Dateinamen abfangen
      if(!file_exists($filename)) {
       printf("Die Datei <b>%s</b> wurde nicht gefunden!", $name);
      }
      else {
        header("Content-Type: application/octet-stream");
        header("Content-Disposition: attachment; filename=\"$name\"");
        readfile($filename);
      }
      Gruß Jan

      Kommentar


      • #4
        nee es geht nicht

        Danke für die Antworten....
        es kommt jetzt zwar der Download......
        das Bild wird auch übertragen.....
        aber es ist garnicht das Bild sondern der Rest des Script Download.php. mit dem Namen des Bildes.
        Lasse ich nur die Header zeilen im Script wird eine leere Datei übertragen mit dem Namen des Bildes.

        Was mache ich falsch ????

        Bernd

        Kommentar


        • #5
          Re: nee es geht nicht

          Original geschrieben von Bernd
          Danke für die Antworten....
          es kommt jetzt zwar der Download......
          das Bild wird auch übertragen.....
          aber es ist garnicht das Bild sondern der Rest des Script Download.php. mit dem Namen des Bildes.
          Lasse ich nur die Header zeilen im Script wird eine leere Datei übertragen mit dem Namen des Bildes.

          Was mache ich falsch ????

          Bernd
          na die datei muss schon irgendwie mit übergeben werden, nicht nur der header.
          nach readfile() bzw. echo => exit;
          dann führt er den rest des skripts nicht mehr aus oder - falls das net erwünscht ist, eine eigene datei in der nur
          die header und wahlweise db-output der file bzw. den output von readfile steht - für db-output den primary key, für readfile den pfad zum bild

          und entsprechend dann alle download links auf die datei.
          <a href="download.php?id=333">DLD</a>
          bzw.
          <a href="download.php?pfad=../bla/blubber.jpg">DLD</a>

          so hab ichs jedenfalls immer geregelt - mit der eigenen datei, allerdings hab ich für sowas nur db-generierte dateien - mit readfile hab ichs noch nie probiert, aber das dürft kaum das problem sein

          Kommentar


          • #6
            ich verstehs nicht

            Danke WhiteMountain für die Antwort....aber ich verstehs nicht.
            Ich habe ja ein fertiges Script was beim Download von .exe und .zip funktioniert.
            Nur eben bei .jpg nicht.
            Habe jetzt die zwei Header Zeilen vors Script geschrieben
            und jetzt werden auch .jpg gedownloadet.
            Aber eben falsch....
            Ich verstehe das mit dem Header nicht ????
            Gibt es keinen einfacheren Weg ????

            Bernd

            Der Anfang meines jetzigen Scrpits:

            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
            <HTML><HEAD>
            <META HTTP-EQUIV="content-type" CONTENT="text/html;charset=iso-8859-1">
            <?
            echo "<meta http-equiv=\"refresh\" content=\"1;URL=$name\">";
            ?>
            <TITLE>Download</TITLE>
            <link rel=stylesheet type="text/css" href="../images/css.css">
            <?

            Kommentar


            • #7
              Hallo,

              Ersetze den Code in Deiner Datei (download.php) komplett mit dem folgenden Code. In dem Fall gehe ich davon aus, dass die Datei download.php im selben Verzeichnis wie die Dateien liegt.
              Code:
              <?php
              $name = basename($name);
              
              # Falsche Dateinamen abfangen
              if(!file_exists($name)) {
               printf("Die Datei <b>%s</b> wurde nicht gefunden!", $name);
              }
              else {
                header("Content-Type: application/octet-stream");
                header("Content-Disposition: attachment; filename=\"$name\"");
                readfile($name);
              }
              ?>
              Das Script tut beim aufruf "download.php?name=IM000387.jpg" folgendes:
              Es liest die Datei "IM000387.jpg" mit readfile() vom Server und schickt es an den Browser. Durch die vorangestellten Header-Angaben gaukelst Du dem Browser vor, dass es sich um eine Datei handelt, die er nicht direkt darstellen kann. Dadurch öffnet er automatisch den "Speichern unter"-Dialog.

              Gruß Jan

              Kommentar


              • #8
                danke....aber geht nicht

                Danke für die Antwort....
                ja der Speichern Dialog kommt.....
                nach klick auf Speichern geht der Dialog zu und nichts ist passiert.
                ?????
                Bernd

                Kommentar


                • #9
                  Re: ich verstehs nicht

                  Original geschrieben von Bernd
                  [...]Ich verstehe das mit dem Header nicht ????
                  Gibt es keinen einfacheren Weg ????
                  sorry bin bissl übernächtigt drum hab ich wohl net aufmerksam genug gelesen und auch bissl missverständlich geantwortet.

                  wenn du das jpg/gif was auch immer per metatag direkt aufrufst bekommt das ding schon seinen header verpasst - und wird entsprechend angezeigt statt gespeichert.

                  also basteln wir uns nen eigene datei, in dem man den inhalt der datei als string einliest, einen header davorsetzt und das file dergestalt an den browser schickt.
                  deine download.php schaut dann so aus:
                  Code:
                  <?
                  //wenns ne zip oder exe is alles wie gehabt
                  if(substr($name,-3)!=("zip"||"exe")
                    {
                      ?>
                       <meta http-equiv="refresh" content="1; URL=$name;">
                  	<?
                    }
                  //wenn nicht, dann basteln wir uns selber nen passenden header
                  else
                    {
                      $typ=strrchr($name,".");
                  	switch ($typ)
                  	  {
                  	    case "jpg":
                  		  $typ="image/jpeg";
                  		  break;
                  		case "jpeg":
                  		  $typ="image/jpeg";
                  		  break;
                  		case "jpe":
                  		  $typ="image/jpeg";
                  		  break;
                  		case "gif":
                  		  $typ="image/gif";
                  		  break;
                  	  }
                      header("Content-Type: $typ");
                    	header("Content-Disposition: attachment; filename=$name");
                    	echo readfile($name);
                  	exit();
                    }
                  ?>
                  ich kanns im moment leider nicht testen, weil ich schwierigkeiten mit meinem hoster hab - aber abesehen von vergessenen strichpunkten sollts so gehen.
                  als mime type application octetstream anzugeben um den "speichern" - dialog zu erzwingen würd ich nicht empfehlen weil a) das speichern bereits durch die content-disposition attachement erzwungen wird und du b) ein kaputtes file bekommst wenns blöd geht.

                  besser jetzt?
                  lg,
                  sonja
                  ich hoff das is jetzt verständlicher

                  ps wobei ich mir mit dem readfile() wirklich nicht sicher bin- versuchs auch mal mit fopen()

                  [Editiert von WhiteMountain am 09-03-2002 um 15:26]

                  Kommentar


                  • #10
                    danke !!! aber

                    Nachdem alles nicht funktioniert hat habe ich den Übeltäter gefunden.(zufall)
                    Hier auf dem Rechner läuft Apache 2.0.32.....und dieser kann das nicht.
                    Als ich den 1.3.23 aktiviert habe gingen alle meine Versuchsscripte.
                    Trotzdem gefällt mir das alles nicht.Netscape lädt manchmal nur halbe Bilder und mit Opera gehts garnicht ausser man stellt dort so ein dass jpg immer geladen wird.

                    Ich möchte eigentlich nur eine Nachricht erzeugen wenn jemand ein Bild downloadet.Im Apache Logfile geht das ja nur sehr schwer draus hervor....daher wollte ich einen Download-Link einrichten und in dieses Script noch eben die Nachricht an mich einfügen indem einfach noch etwas in das Apachelog geschrieben wird.
                    Bei .exe und .zip geht das ja auch einwandfrei.

                    Bernd

                    Kommentar

                    Lädt...
                    X