WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Binärdaten in einer MySQL-Tabell speichern und ausgeben (http://www.wcm.at/forum/showthread.php?t=181101)

spöppi 20.12.2005 10:47

Binärdaten in einer MySQL-Tabell speichern und ausgeben
 
Hallo Leute,
ich möchte eine Datei (z.B. WORD) in einer mysql Tabelle speichern. In die Tabelle bringe ich die Daten auch, nur kann ich sie nicht mehr auslesen.
Beim aufrufen erkenne ich zwar das es z.B ein Word Dokument bzw. ist auch der Name richtig, aber die Größe stimmt nicht bzw. kann sie auch nicht geöffnet werden.

// meine Tabelle

CREATE TABLE `anhang` (
`id` int(11) NOT NULL auto_increment,
`dateiname` varchar(225) collate latin1_general_ci NOT NULL default '',
`dateigroesse` int(11) NOT NULL default '0',
`dateityp` varchar(225) collate latin1_general_ci NOT NULL default '',
`daten` mediumblob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=15 ;


// eingabe Befehl

$data = addslashes(fread(fopen($_FILES['anhang']['tmp_name'], "r+"), $_FILES['anhang']['size']));

$query="INSERT INTO anhang (dateiname,dateigroesse,dateityp,daten) ".
"VALUES ('".$_FILES['anhang']['name']."', '".$_FILES['anhang']['size']."', '".$_FILES['anhang']['type']."', '".$data."')";

$result=mysql_query($query);
// eingabe zelle
<th> appendix:</th><td colspan="3"><input type="file" id="anhang" name="anhang" size="80"/> </td>


// ausgabe script

$SQL = "SELECT dateiname, dateigroesse, dateityp, daten FROM anhang WHERE id=$id";
$ResultPointer = mysql_query($SQL, $dbh);
$Result=mysql_fetch_object($ResultPointer);

header("Content-type: ".$Result->dateityp);
header("Content-length: ".$Result->dateigroesse);
header("Content-Disposition: attachment; filename=".$Result->dateiname);
echo $data->Daten;

Ich hoffe ihr könnt mir dabei helfen.
Danke

helios 20.12.2005 11:28

wie gross ist denn die datei nach dem herunterladen? die variable max_allowed_packet bestimmt die maximale grösse.

spöppi 20.12.2005 12:01

Zitat:

Original geschrieben von helios
wie gross ist denn die datei nach dem herunterladen? die variable max_allowed_packet bestimmt die maximale grösse.
Nach dem herunterladen ist die Datei immer 1KB groß.

Wo müsste ich die Variable max_allowed_packet einsetzen???

Danke

spöppi 20.12.2005 15:24

hallo,
ich habe ein bisschen was umgeschrieben dadurch erkenne ich jetzt die größe der Datei richtig und kann diese auch öffnen.
NUR wird der Inhalt nicht richtig dargestellt.

die neue Version:

Eingabe:


PHP-Quellcode:

<?php
$data = mysql_real_escape_string(fread(fopen($_FILES['anhang']['tmp_name'], "rb"), $_FILES['anhang']['size']));
$dateiname = mysql_real_escape_string($_FILES['anhang']['name']);
$dateigroesse = mysql_real_escape_string($_FILES['anhang']['size']);
$dateityp = mysql_real_escape_string($_FILES['anhang']['type']);

$query="INSERT INTO anhang (dateiname,dateigroesse,dateityp,daten) ".
"VALUES ('".$dateiname."', '".$dateigroesse."', '".$dateityp."', '".$data."')";

$result=mysql_query($query);
$datei_id= mysql_insert_id();
?>


Ausgabe:


PHP-Quellcode:

<?php
$SQL = "SELECT dateiname, dateigroesse, dateityp, daten FROM anhang WHERE id=$id";
$ResultPointer = mysql_query($SQL, $dbh);
$Result=mysql_fetch_object($ResultPointer);

header("Content-type: ".$Result->dateityp);
header("Content-length: ".$Result->dateigroesse);
header("Content-Disposition: attachment; filename=".$Result->dateiname);
echo $Result->daten;
?>


wenn ich eine Excel Datei verwende schaut der Inhalt so aus:

Tabelle3Œ1+ÁÁ`iüT  Suhner Type


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag