Huhu liebe Liste!
Ich habe von einem Verein einen Datenbank-Dump des CRM Microsoft Navision. Der wurde schon nach Mariadb konvertiert. Eine Spalte heißt "bild" und ist vom Typ Longblob. Den Longbob möchte ich mir anschauen.
Die Größe der Einträge sind 10kB-10MB.
Wenn ich so ein Blob mit Phpmyadmin herunterlade, kommt eine Datei voller Hex-Ziffern. Eine beginnt z.B. so: 02457D5BED7B0750535DBBEEC65044C150A513154494DEAB09A80828BD17210A4A1101955E43912E8422A0A0040541148874A5F722201D940EA12390504308C98DDF9973CFFCFFFDCF3DFF3
Die ersten acht Ziffern sind bei jeder Datei gleich: 02 45 7D 5B. Wenn die acht Ziffern am Anfang vier Bytes sind, dann ist das keine bekannte File Signature. Was könnte es dann sein?
Jede Datei endet mit 00. Ich habe komplette Dateien nach Binärfile konvertiert und als Textdatei geöffnet, es sieht völlig random aus, ich sehe keine Muster und keinen Ascii-Text. Der größte gemeinsame Teiler aller Dateigrößen ist 2, also bestehen die Dateien nicht aus gleich großen Blöcken, und die Hex-Werte müssen wahrscheinlich in Paaren gelesen werden.
Jetzt ist die Frage, wie lese ich diese Bilder? Habe ich die Blobs schon falsch ausgelesen, also die Datenbank falsch bedient? Gibt es ein komprimiertes Bildformat ohne Header, oder lässt sich der Header von bekannten Formaten vielleicht sinnvoll ergänzen?
Viele Grüße Thomas
On 7. Jun 2022, at 06:45, Thomas Schmidt schmidt@netaction.de wrote:
[…]Datenbank-Dump des CRM Microsoft Navision. […]
Die ersten acht Ziffern sind bei jeder Datei gleich: 02 45 7D 5B.
Die Suche nach 0x02457d5b ist schon der richtige Pfad. Das scheint nach dem Verwerfen der ersten 4 Byte ein DeflateStream (.Net) zu sein. Die Blogposts haben Beispielcode.
Andreas
Vielen Dank Andreas!
Ich habe nicht gedacht, dass ich vor den Magic code 0x schreiben muss, aber dann fand Google den Datentyp.
Ich konnte die Dateien problemlos lesen. Mein Code in PHP, falls es jemanden interessiert:
<?php // Die Datei aus dem Navision-Datenbank-Blob sieht im Texteditor so aus: // 02457D5BED7B0750535DBBEEC65044C150A513154494DEAB09A8... $file = file_get_contents('bild.bin');
// Die ersten acht Zeichen sind 02 45 7D 5B // Das ist die Magic Number für NAV Compressed Blob Type // Also ein Binär-Blob in einer .NET-Datenbank $file = substr($file, 8);
// Die Hex-Werte in Binär wandeln // Kein Plan, warum die als Hex aus der Datenbank kommen $file = hex2bin($file);
// Entpacken, heraus kommt die Bilddatei $file = zlib_decode($file);
header('Content-Type: image/jpeg'); echo $file;
lug-dd@mailman.schlittermann.de