Lara: PDF(BLOB) aus Datenbank ausgeben

In meienr Datenbank gibt es drei Spalten: id, datei und typ.

bei typ ist die MIME gespeichert und bei Datei die DAtei als BLOB. Nun würde ich sie gerne wieder ausgeben, doch hierbei komme ich nicht weiter.

Es kommt kein Fehler, sondern ein neues Fenster....

Öffnen von skriptname.php .... wie sollt Firefox verfahren...

es sollte aber eigentlich das PDF geöffnet werden.

$sql =  "SELECT datei,typ FROM dateien WHERE id =1";
	$result = mysql_query($sql);
	$ausgabe = mysql_fetch_object($result);
	if($ausgabe==TRUE)
	{
	header("Content-Type: application/'.$ausgabe->typ.'"); 
	header("Content-Disposition: filename='.$ausgabe->datei.'.'.$ausgabe->typ.'"); 
	//header("Content-Length: ".filesize($filename)); // Dateigröße	
	}	

Ich denke ich habe alles beachtet, aber das Ergebnis sagt, Nein nicht alles beachtet :-)

Lara

  1. Hallo Lara,

    In meienr Datenbank gibt es drei Spalten: id, datei und typ.

    bei typ ist die MIME gespeichert und bei Datei die DAtei als BLOB.

    Das heißt typ ist ein TEXT oder VARCHAR und datei ein BLOB.

    $sql =  "SELECT datei,typ FROM dateien WHERE id =1";
    	$result = mysql_query($sql);
    	$ausgabe = mysql_fetch_object($result);
    	if($ausgabe==TRUE)
    	{
    	header("Content-Type: application/'.$ausgabe->typ.'"); 
    	header("Content-Disposition: filename='.$ausgabe->datei.'.'.$ausgabe->typ.'"); 
    	//header("Content-Length: ".filesize($filename)); // Dateigröße	
    	}	
    

    Nach deiner Beschreibung oben müsste $ausgabe->datei doch die komplette Datei enthalten und nicht bloß deren Namen, wie in der zweiten header-Zeile verwendet. Und ein MIME-Typ enthält auch den vorderen Teil wie z.B. application. (Stell dir vor der typ wäre image/jpeg, dann wäre der Content-Type-Header bei dir application/image/jpeg oder application/jpeg, was beides falsch ist.)

    Viele Grüße
    Robert

    1. In C# mache ich Ähnliches. Content-Disposition ist allerdings der Dateiname. Der Inhalt muss als Body geschickt werden.

      Guck Dir mal das hier an: http://stackoverflow.com/questions/24717629/in-php-how-do-i-reliably-transfer-binary-data-as-body-of-an-http-response

      Rolf

    2. Du hattest recht, es war doppelt gemobelt.

      header('Content-Type: '.$ausgabe->typ); // MIME-Typ
      echo $ausgabe->datei;	
      

      Es war einfach als gedacht!

      Ich kann also nun ein PDF und ein Bild direkt aufrufen. Geht das auch mit einem Word Dokument?

      Weil wenn ich es mit einem Word Dokument mache, möchte es erst gespeichert werden, es soll aber eigentlich auch sofort angezeigt werden!

      Gruß

      Lara

      1. Tach!

        Geht das auch mit einem Word Dokument?

        Das spielt keine Rolle, um was für eine Art Dokument es sich handelt.

        Weil wenn ich es mit einem Word Dokument mache, möchte es erst gespeichert werden, es soll aber eigentlich auch sofort angezeigt werden!

        Das ist abhängig vom Verhalten des Browsers und des Systems. Das kannst du nicht vom Server aus erzwingen.

        dedlfix.