Hallo,
ich habe in einer MySQL Datenbank eine LONGBLOB Spalte erstellt und eine VARCHAR Spalte für den Dateityp. In diesen speichere ich Binärdaten und lese Sie wieder aus.
Das abspeichern und das auslesen sieht an sich aus als würde es funktionieren. Wenn ich aber eine Binärdatei zum Beispiel Word-Dokument, RAR-Datei oder so ausgebe, dann sind die Dateien kaputt. Woran könnte es liegen. Anbei der Quellcode.
Datenbankconnection:
Datei-Speichern:
Datei ausgeben:
Wichtig!: Wenn ich zum Beispiel ein JPEG Image in die Datenbank hochlade und mir dieses in Navicats Blob Viewer ansehe dann wird mir das richtige Image angezeigt.
PDF Dokumente und Text-Dateien machen aber KEINE Probleme!
Ich habe auch mysql_real_escape_sring() probiert.
gruß
yonthebeach
ich habe in einer MySQL Datenbank eine LONGBLOB Spalte erstellt und eine VARCHAR Spalte für den Dateityp. In diesen speichere ich Binärdaten und lese Sie wieder aus.
Das abspeichern und das auslesen sieht an sich aus als würde es funktionieren. Wenn ich aber eine Binärdatei zum Beispiel Word-Dokument, RAR-Datei oder so ausgebe, dann sind die Dateien kaputt. Woran könnte es liegen. Anbei der Quellcode.
Datenbankconnection:
PHP-Code:
$verbindung = mysql_connect($servername, $username, $password)
or die ("Es kann keine Verbindung zur Datenbank herstellen".mysql_error());
mysql_query("SET NAMES 'utf8'");
mysql_query("SET COLLATION_CONNECTION 'utf8_unicode_ci'");
mysql_select_db($db);
PHP-Code:
if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0)
{
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);
if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
}
$query = "INSERT INTO t_document (dc_name, dc_size, dc_type, dc_content ) ".
"VALUES ('$fileName', '$fileSize', '$fileType', '$content')";
mysql_query($query) or die('Error, query failed'.mysql_error());
echo "<br>File $fileName uploaded<br>";
}
PHP-Code:
if(isset($_GET['id']))
{
// if id is set then get the file with the id from database
$id = $_GET['id'];
$query = "SELECT dc_name, dc_type, dc_size, dc_content " .
"FROM t_document WHERE dc_id = '$id'";
$result = mysql_query($query) or die('Error, query failed');
list($name, $type, $size, $content) = mysql_fetch_array($result);
header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$name");
echo $content;
exit;
}
Wichtig!: Wenn ich zum Beispiel ein JPEG Image in die Datenbank hochlade und mir dieses in Navicats Blob Viewer ansehe dann wird mir das richtige Image angezeigt.
PDF Dokumente und Text-Dateien machen aber KEINE Probleme!
Ich habe auch mysql_real_escape_sring() probiert.
gruß
yonthebeach
Kommentar