MySQL / C++ | Bild aus DB laden
-
Hallo,
das ist mein erster Post hier.
Ich wusste nicht genau worunter mein Problem fällt deshalb poste ich es mal hier.Bin dabei eine C++ Server Client Anwendung zu schreiben. Der Server soll Bilder aus der MySQL und per TCP an den Client verschicken.
Das verschicken mit "normalen" Strings funktioniert.
Mein Problem jedoch ist, das Auslesen der Bilder aus der DB.
Die Bilder sind als MediumBlob gesichert.
Wenn ich sie jedoch abfrage bekomme ich nicht das ganze Bild ausgegeben.
Ich meine damit wenn man sich den Eintrag in der MySQL Konsole anschaut sind ja viele kryptische Zeichen und wenn ich es über die Konsole des Eclipse anschaue hört der eintrag nach dem Auslesen nach dem zweiten zeichen auf.
Als ob da nicht mehr zeichen aus der DB gelesen werden.Hier ist mein Code:
#include <iostream> #include <mysql/mysql.h> #include <stdio.h> #include <string> #include <stdlib.h> #include "string.h" using namespace std; int main() { MYSQL *hndl=mysql_init(NULL); MYSQL_RES *res; MYSQL_ROW row; if(!mysql_real_connect(hndl, "localhost", "dbuser", "", "dev", 0, NULL, 0)){ } else cout << "db conn ok\n"; string q; const char * qq = "SELECT Picture, LENGTH(Picture) from P_DB WHERE id=1;"; mysql_real_query(hndl,qq,strlen(qq)); res = mysql_store_result(hndl); row = mysql_fetch_row(res); char content[atoi(row[1])+1]; strcpy(content,row[0]); printf("%s\n%ilength\n",content,atoi(row[1])); return 0; }
Beim Printf erscheint so etwas: �PNG
(Bitte nicht auf die unbehandelten Fehler achten, das hier ist nur ein kleiner auszug den ich in einem neuem prjekt angelegt hatte und zu testen ob es vielleicht am gesamten projekt liegt)
Wäre cool wenn mir jemand erklären könnte warum das passiert bzw. was man dagegen machen kann.
Ach ja was vielleicht noch erwähnenswert wäre ist das ich das unter linux geschrieben habe.
Vielen Danke schon mal für eure Hilfe.
Take Care
Livingstone
-
Hast du versucht das Bild auszugeben, statt bloss den String? Vielleicht liegt das Problem darin, dass dein Konsolen Puffer irgendwie begrenzt ist...
-
das bild liegt binär in blob.
du musst es wieder zusammenbauen, also eine binärdatei öffnen und schreiben, oder es binär in den browser strömen mit richtigem "header".
... ... fp = fopen("deinbild.png", "wb"); //b für binär mysql_query(kontakt, "SELECT Picture, LENGTH(Picture) from P_DB WHERE id=1"); result = mysql_store_result(kontakt); row = mysql_fetch_row(result); lengths = mysql_fetch_lengths(result); fwrite(row[0], lengths[0], 1, fp); mysql_free_result(result); fclose(fp); ... ...
oder ähnlich, oder eben wegströmen mit entsprechender mime information vorneweg
content-type: image/png
-
@Samyboy:
Ich habe es nicht versucht auszugeben.
Ist Konsolenpuffer vom mysqlclient denn größer als der der "normalen" konsole?
Dort hab ich alle einträge sehen können.@elise:
Danke für den Tip.Werd es mal versuchen und dann bescheid geben.