Italian Lettura campo BLOB da Mysql

m277392

Member
Salve a tutti,
ho il problema di leggere un campo BLOB creato da VB.net su database MySql ( campo FOTO) e poi
visualizzare in una Imageview.

Il codice che ho provato ad usare è il seguente:

Dim buffer() As Byte
Dim bt As Bitmap
Dim s_tru As StringUtils
buffer = s_tru.DecodeBase64(CNT.rs1.GetString2("Foto"))
Dim In As InputStream
In.InitializeFromBytesArray(buffer, 0, buffer.Length)
bt.Initialize2(In)
ImageView1.Bitmap = bt


ma ho nel LOG l'errore sotto:

java.io.IOException: Bad Base64 input character decimal 63 in array position 0 ...

In VB.net memorizzo il campo come sotto.

1596119756426.png


1596119851564.png


Non riuscendo a risolvere chiedo aiuto.

Mille grazie a tutti per quanto potrete dirmi

Massimiliano
 
Last edited:

sirjo66

Well-Known Member
Licensed User
Longtime User
direi che l'errore è semplice:
tu memorizzi l'immagine nel database in formato "Raw" e poi lo leggi in formato "Base64", direi che non è la stessa cosa, per cui durante la lettura è normale che ti dia errore dicendoti che non è un formato Base64 valido.
Di solito si sconsiglia l'uso del Blob, e si preferisce trasformare il tutto in Base64 ed utilizzare un campo String anzichè un Blob
Dovresti provare con:
B4X:
cmd.Parameters.Add("@d22", MySqlDbType.Blob).Value = Convert.ToBase64String(ms.ToArray())
 

LucaMs

Expert
Licensed User
Longtime User
Mi pare che @sirjo66 abbia ragione tranne per la riga suggerita, sia perché magari non si voglia o possa modificare il db originale (e quindi il sorgente VB.Net), sia perché con quella riga andrebbe a scrivere una stringa di tipo Base64 in un campo di tipo Blob.

La soluzione, invece, sarebbe di leggere i byte da quel campo. Quindi invece di:
buffer = s_tru.DecodeBase64(CNT.rs1.GetString2("Foto"))
B4X:
buffer = s_tru.DecodeBase64(CNT.rs1.GetBlob("Foto"))


(Nota che alle versioni 2, come GetString2 e quindi anche GetBlob2, non devi passare il nome del campo del database ma la sua posizione nella tabella)
 

m277392

Member
Salve,
ho optato per modificare Vb.net e mettere tutti i dati come stringa di tipo Base64 in un campo del database LONGTEXT.
Il tutto si è risolto senza problemi.

Grazie a tutti dell'aiuto che mi avete dato

Massimiliano
 
Top