| |
ADO.NET / DatenbankenByte Array eines JPEG Bildes auslesen und in MySQL DB speichern | | | Autor: Saftschubser | Datum: 18.03.15 10:27 |
| Hallo zusammen,
derzeit versuche ich, den Inhalt eines Bildes auszulesen, um diesen dann in einer MySQL DB zu speichern.
Zum Auslesen des Byte Arrays habe ich zwei versch. Codes verwendet.
a.)
Dim images2 As Image = Image.FromFile(directory & filename & extension)
Dim mstream As New _
System.IO.MemoryStream()
images2.Save(mstream, _
System.Drawing.Imaging.ImageFor_
mat.Jpeg)
Dim arrImage() As Byte = _
mstream.GetBuffer()
mstream.Close() b.)
Dim fileStream As New System.IO.MemoryStream()
Dim byteImg As Byte()
byteImg = File.ReadAllBytes( _
directory & filename & _
extension)
fileStream.Write(byteImg, 0, _
byteImg.Length)
fileStream.Close() Die Daten speichere ich dann wie folgt:
mysql_statement("INSERT INTO cam_attachements (" & _
"`msg_id`,`user_id`,`attachement`,`extension`,`storage_datetime`,`fileHeader" & _
",`stream`) VALUES ('" & message_id & "','1','" & filename & "','" & _
extension & "',UTC_TIMESTAMP(),'" & header & "','" & byteImg.ToString & "')") Der Speichervorgang klappt tadellos.
Der Inhalt von "stream" sieht aber merkwürdig aus, egal, welches Bild verwendet wird, der "Streaminhalt" ist immer gleich (0x53797374656D2E427974655B5D)-> System.Byte[].
Habe auch schon probiert:
Public Function ByteArrayToString(ByRef Barr() As Byte) As String
Return Convert.ToBase64String(Barr)
End Function Public Function ByteArrayToTextString(ByRef Barr() As Byte) As String
Dim enc As System.Text.Encoding = System.Text.Encoding.Default
Return enc.GetString(Barr)
End Function Was mache ich falsch?
Ich habe versch. Feldtypen verwendet, von Blob über Longblob etc.
Ist das ein Problem des Feldtypens oder der Art und Weise, wie ich das Bild auslese?
Danke und Gruß
Boris | |
Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern | | | Autor: Saftschubser | Datum: 18.03.15 12:08 |
| Hi Dave,
danke für deine Rückmeldung.
Wenn ich via
Dim byteImg As Byte()
byteImg = File.ReadAllBytes(directory & filename & extension) ein Byte Array erhalte, wie schreibe ich das dann korrekt in die DB?
Feld habe ich auf varbinary geändert (ist das nicht zu klein?).
Per byteImg.tostring?
Gruß
Boris
| |
Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern | | | Autor: Manfred X | Datum: 18.03.15 13:55 |
| Hallo!
Für das Zusammenbauen oder Analysieren von Pfadangaben (Strings)
ist im Framework die IO.Path-Klasse zuständig.
Die Byte-Größe Deines JPEG-formatierten-Bildes hängt vom Qualitätsfaktor ab,
den Du als EncoderParameter beim Schreiben in einen Stream vorgeben kannst.
90-95: hohe Qualität, großes Bytearray
70-80: brauchbare Qualität
40-60: grenzwertige Qualität, kleines Bytearray
| |
Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern | | | Autor: Saftschubser | Datum: 18.03.15 14:51 |
| Ich weiss nicht, ob ich auf dem richtigen Dampfer bin.
Dim fs As FileStream = File.Open(directory & filename & extension, _
FileMode.Open, _
FileAccess.Read, _
FileShare.None)
fs = File.Open(directory & _
filename & extension, _
FileMode.Open)
Dim b(1024) As Byte
Dim temp As UTF8Encoding = New _
UTF8Encoding(True)
Do While fs.Read(b, 0, _
b.Length) > 0
MsgBox(temp.GetString(b))
Loop
fs.Close() Liefert mir eine Exception, dass der Prozess nicht auf die Datei zugreifen kann, da sich diese in Verwendung befindet. Ich stehe etwas auf dem Schlauch. | |
Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern | | | Autor: Manfred X | Datum: 18.03.15 14:59 |
| Lesen der Bytes einer Datei?
Es ist viel, viel schwieriger ...
Nämlich so ....
Dim byt() As Byte = IO.File.ReadAllBytes(<Pfad>) Die Datei ist z.B. gesperrt, wenn das Bild in eine Bitmap geladen worden ist.
Näheres hier | |
Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern | | | Autor: Saftschubser | Datum: 18.03.15 15:24 |
| Danke für deine Geduld
Hatte nicht gesehen, dass ich etwas oberhalb das Image geladen habe, daher dann wohl der Fehler.
Allerdings stolpere ich von einer einem Problem zum nächsten.
Verwende ich den Einlesevorgang ins Array von dir, versuche ich dieses anschließend per StringBuilder zusammenzufügen, Testausgabe per Msgbox, mit dem Ergebnis, dass ich ein leeres Fenster erhalte.
Dim imageByteArray() As Byte = IO.File.ReadAllBytes(directory & filename & _
extension)
Dim appendedString As New _
StringBuilder( _
imageByteArray.Length * 2)
For Each part As Byte In _
imageByteArray
appendedString.Append(part)
Next
MsgBox(appendedString.ToString( _
)) | |
Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern | | | Autor: Manfred X | Datum: 18.03.15 15:33 |
| Was willst Du denn machen?
Dave hat doch darauf hingewiesen, daß Du keine Zeichenfolge benötigst,
um ein Bild in der DB abzulegen.
Mir ist keine Überladung der System.Text.Stringbuilder-Klassen-Methode
append bekannt, die ein rohes Byte akzeptiert. Der Wert wird in eine
vorzeichenlose Ganzzahl umgewandelt (-> Zeichenfolge).
Die MsgBox zeigt Texte bis zu einer Länge von ca. 1000 Zeichen an. | |
Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern | | | Autor: Saftschubser | Datum: 18.03.15 15:39 |
| Das hatte ich gelesen, dass ich das nicht benötige (was Dave eingangs geschrieben hatte).
Ich möchte im Grunde folgendes realisieren, der Inhalt eines Bildes soll in die DB geschrieben werden, damit ich den Inhalt später analysieren kann, z.B auf das Vorkommen der Angabe FFD8 im Header (zwecks Prüfung auf JPEG). Das kann natürlich auch zur Laufzeit erfolgen, soll anhand des Inhaltes in der DB auch später erfolgen können.
Daher ging ich davon aus, dass ich mir den "binären" Inhalt eines Bildes auch als HEX ausgeben lassen könne, um das per Auge prüfen zu können (Klartext in der DB), das war mein Gedanke. | |
Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern | | | Autor: Manfred X | Datum: 18.03.15 15:47 |
| gomblisiert ....
VB kann aber hexen:
Dim hexstr As String = Hex(CByte(212)) | |
Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern | | | Autor: Saftschubser | Datum: 18.03.15 16:36 |
| Konvertiere ich das ByteArray nun in HEX und speichere dies in einer DB (Blob Feld) dann dauert dies pro 100 kB Bild ca. 1 Minute bei 60 % CPU Auslastung. Daher fällt die HEX Geschichte nun aus.
Und das varbinary Feld dürfte dafür viel zu klein sein, daher fällt das auch aus.
Wenn es dafür nicht irgendeine "Superduperfunktion" gibt werde ich die Bilder schlicht auf HDD speichern müssen und auf eine nachträgliche Analyse verzichten müssen. | |
Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern | | | Autor: Manfred X | Datum: 18.03.15 16:47 |
| Wie groß sind Deine JPG-Bilddateien
(in Pixel und in Filelength [Byte])?
| |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere Infos
|