Hallo zusammen ich habe ein kleines Problem mit OCI und BLOBs.
In einer Datenbank werden Binärdaten in einem BLOB gespeichert und mit:
greife ich darauf zu. Sind die Daten textorientiert, habe ich kein Problem, aber Dateien wie GIFs oder JPGs werden nach dem Download größer. Ich habe schon die Abfrage auf Errormeldungen getestet und keine Erhalten.
Die Definition fuer den Header sieht so aus:
Ich habe kontrolliert, ob die Daten richtig in der Datenbank landen und sie über TCL/TK abgefragt und dort lief es ohne Probleme. Die Größe hat gestimmt und die gespeicherte Datei war aufrufbar.
Es sieht so aus, als würde die Datei durch den Download größer werden und hat im Fall von RTF-Dateien am Anfang eine Leerzeile.
Jetzt weiss ich leider nicht mehr weiter. Vielleicht hat von Euch einer einen Tipp, was ich noch versuchen kann, oder woran es vielleicht liegt. Vielen Dank schon im Voraus für Tipps oder Hilfen.
Viele Grüße,
Stefan
In einer Datenbank werden Binärdaten in einem BLOB gespeichert und mit:
PHP-Code:
public function getDokumentDokumentID($dokID)
{
// Initialisierung der Ergebnisvariblen
$dokument = array();
// Erstellen einer Verbindung zur Datenbank
$dbConn = $this->dbConnect();
// Aufbau des Query-Strings fuer die Tabelle WIKISEITEN_VERSION
$dbQuery = "SELECT A.DOKUMENT_ID AS DOKUMENT_ID,A.DOKUMENT_NAME AS DOKUMENT_NAME," .
" A.DOKUMENT_TYP AS DOKUMENT_TYP, B.SEITENINHALT AS SEITENINHALT," .
" C.PROJEKT_ID AS PROJEKT_ID".
" FROM WIKISEITEN_DOKUMENT A,WIKISEITEN_VERSION B, PROJEKT_DOKUMENTATION C WHERE" .
" A.DOKUMENT_ID=".$dokID." AND A.DOKUMENT_ID=B.DOKUMENT_ID".
" AND A.DOKUMENT_ID=C.DOKUMENT_ID";
// Ausfuehren des Query-Strings auf der Datenbank und Rueckgabe
// des Ergebnisses
$stmt=OCIParse($dbConn, $dbQuery);
OCIExecute($stmt);
OCIFetch($stmt);
$bdatalob=OCIResult($stmt, "SEITENINHALT");
$seiteninhalt=$bdatalob->load();
$dID = OCIResult($stmt, "DOKUMENT_ID");
$dName = OCIResult($stmt, "DOKUMENT_NAME");
$dTyp = OCIResult($stmt, "DOKUMENT_TYP");
$pID = OCIResult($stmt, "PROJEKT_ID");
if ($pID)
{
$dokument['DOKUMENT_ID'] = $dID;
$dokument['DOKUMENT_NAME'] = $dName;
$dokument['DOKUMENT_TYP'] = $dTyp;
$dokument['SEITENINHALT'] = $seiteninhalt;
$dokument['PROJEKT_ID'] = $pID;
}
// Beenden der Verbindung zur Datenbank
$this->dbLogOff($dbConn);
return $dokument;
}
Die Definition fuer den Header sieht so aus:
PHP-Code:
if ($dokTyp == "doc")
{
$file_extension = strtolower(substr(strrchr($dokName,"."),1));
switch( $file_extension ) {
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
case "mp3": $ctype="audio/mpeg"; break;
case "wav": $ctype="audio/x-wav"; break;
case "mpeg":
case "mpg":
case "mpe": $ctype="video/mpeg"; break;
case "mov": $ctype="video/quicktime"; break;
case "avi": $ctype="video/x-msvideo"; break;
//The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
case "php":
case "htm":
case "html":
case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;
default: $ctype="application/force-download";
}
//Begin writing headers
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
//Use the switch-generated Content-Type
header("Content-Type: $ctype");
//Force the download
$header="Content-Disposition: attachment; filename=".$dokName.";";
header($header );
header("Content-Transfer-Encoding: binary");
echo $blober;
exit;
}
Es sieht so aus, als würde die Datei durch den Download größer werden und hat im Fall von RTF-Dateien am Anfang eine Leerzeile.
Jetzt weiss ich leider nicht mehr weiter. Vielleicht hat von Euch einer einen Tipp, was ich noch versuchen kann, oder woran es vielleicht liegt. Vielen Dank schon im Voraus für Tipps oder Hilfen.
Viele Grüße,
Stefan
Kommentar