Spanish Problems uploading an image from the gallery to a SQL database.

RAFA BRAVO

Active Member
Licensed User
Longtime User
No puedo subir una imagen de la galería móvil. si puedo hacerlo con una imagen descargada de google. ¿Será por el formato o la calidad de la imagen?

Código utilizado:
[CODE lang = "b4x" title = "B4X"] Sub ImageViewIU_Click
ImageChooser.Initialize ("imgChooser")
ImageChooser.Show ("imagen / *", "Elegir imagen")
End Sub

Sub imgChooser_Result (Correcto como booleano, Dir como cadena, Nombre de archivo como cadena)
Si tiene éxito, entonces
Dim b como mapa de bits
b.Inicializar (Dir, Nombre de archivo)

ImageViewIU.Bitmap = b

ImageViewIU.Top = t
ImageViewIU.Width = w
ImageViewIU.Height = h

Dim Delta, altura, ancho como int
Si b.Width / b.Height> ImageViewIU.Width / ImageViewIU.Height Entonces
Alto = b.Height / b.Width * ImageViewIU.Width
Delta = (ImageViewIU.Height - Height) / 2
ImageViewIU.Height = Altura
ImageViewIU.Top = ImageViewIU.Top + Delta
Más
Ancho = b.Width / b.Height * ImageViewIU.Height
Delta = (ImageViewIU.Width - Width) / 2
ImageViewIU.Width = Ancho
ImageViewIU.Left = ImageViewIU.Left + Delta
Terminara si
Más
ToastMessageShow ("No ha seleccionado ninguna imagen", True)
Terminara si
End Sub [/ CODE]
 

RAFA BRAVO

Active Member
Licensed User
Longtime User
Hola José J. Aguilar. aquí te paso mejor el codigo.
tengo un imageview donde al hacer click voy a seleccionar la imagen que quiero subir a la base de datos:
B4X:
Sub ButtonOk_Click
    If EditTextNameIU.Text = "" Or EditTextMarcaIU.Text = "" Or EditTextDescriptionIU.Text = "" Then
        Msgbox("Nombre, Marca y Descripcion campos obligatorios !", "Fallo")
        Return
    End If
    If Main.Status = "U" Then
        Dim BufferU () As Byte
        If ImageViewIU.IsInitialized Then
            BufferU = CreateRequest.ImageToBytes(ImageViewIU.Bitmap)
        End If
'        Dim Pr2 As String
'        Pr2 = EditTextMarcaIU.Text.SubString(1)
        UpdateRecord(EditTextNameIU.Text,EditTextMarcaIU.Text, BufferU, EditTextDescriptionIU.Text)
'       
    Else
        GetSelectedRecord(EditTextNameIU.Text)
    End If
End Sub

y estas son las rutinas de paRA insertar y actualizar los datos de la base de datos SQL:

B4X:
Sub InsertRecord(Name As String, Marca As String, Blob() As Byte, Description As String)
    Dim cmd As DBCommand = CreateCommand("insertItem", Array(Name, Marca, Blob, Description))
    Dim j As HttpJob = CreateRequest.ExecuteBatch(Array(cmd), Null)
    Wait For (j) jobDone(j As HttpJob)
    ProgressDialogShow("Espere porfavor...")
    If j.Success Then
        ToastMessageShow("Añadido con exito...!", False)
    End If
    ProgressDialogHide
    j.Release
End Sub

Sub UpdateRecord(Name As String, Marca As String, Blob() As Byte, Description As String)
    Dim cmd As DBCommand = CreateCommand("updateItem", Array(Name, Marca, Blob, Description,item_id))
    Dim j As HttpJob = CreateRequest.ExecuteBatch(Array(cmd), Null)
    Wait For (j) jobDone(j As HttpJob)
    ProgressDialogShow("Espere porfavor...")
    If j.Success Then
        ToastMessageShow("Actualizado con exito...!", False)
    End If
    ProgressDialogHide
    j.Release
End Sub

Logro subir imágenes de la carpeta descargas, pero no de la galería, (las fotos hechas por la cámara del teléfono.) si puedo ponerlas en mi imageview pero no subirlas a la base de datos.
 

RAFA BRAVO

Active Member
Licensed User
Longtime User
esta es la parte del codigo donde hago click en la imagen:

B4X:
 ImageViewIU_Click
    ImageChooser.Initialize("imgChooser")
    ImageChooser.Show("image/*","Choose image")
End Sub

Sub imgChooser_Result(Succes As Boolean, Dir As String, FileName As String)
    If Succes Then
        Dim b As Bitmap
        b.Initialize(Dir, FileName)
        
        ImageViewIU.Bitmap = b
        
        ImageViewIU.Top = t
        ImageViewIU.Width = w
        ImageViewIU.Height = h
        
        Dim Delta, Height, Width As Int
        If b.Width / b.Height > ImageViewIU.Width / ImageViewIU.Height Then
            Height = b.Height / b.Width * ImageViewIU.Width
            Delta = (ImageViewIU.Height - Height) / 2
            ImageViewIU.Height = Height
            ImageViewIU.Top = ImageViewIU.Top + Delta
        Else
            Width = b.Width / b.Height * ImageViewIU.Height
            Delta = (ImageViewIU.Width - Width) / 2
            ImageViewIU.Width = Width
            ImageViewIU.Left = ImageViewIU.Left + Delta
        End If
    Else
        ToastMessageShow("No has seleccionado ninguna imagen",True)
    End If
End Sub
 

josejad

Expert
Licensed User
Longtime User
Como parece que puedes ver la imagen de la galeria en tu ImageView, supongo que no hay problemas de permiso.
¿Podria ser un problema de espacio o tamaño? Una foto tomada con el movil puede tener varios Mb, mientras que las descargadas probablemente estén optimizadas.
Prueba a bajar la resolucion de alguna imagen de la galería, o a aumentar el tamaño de tu campo blob.


Ten en cuenta que guardar las imágenes en la base de datos no es lo más recomendable. Normalmente se sube a un directorio del sevidor, y se almacena el nombre o la ruta.

saludos,
 

josejad

Expert
Licensed User
Longtime User
Por cierto, estas usando jRDC2, no? No te da ningún mensaje el log del servidor?
 

RAFA BRAVO

Active Member
Licensed User
Longtime User
Por cierto, estas usando jRDC2, no? No te da ningún mensaje el log del servidor?
Si estoy usando JRDC2 y en el log aparece esto:
B4X:
(PacketTooBigException) com.mysql.jdbc.PacketTooBigException: Packet for query is too large (3228940 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
(IllegalStateException) java.lang.IllegalStateException: WRITER
también me sucede que las imágenes se dan la vuelta en el imageview, He modificado la resolución de la imagen hasta ocupar tan solo 1,5mb y pasa igual. la variable que utilizo en mySQL es un longblob que segun tu articulo es de mas 4 gigas.
 

josejad

Expert
Licensed User
Longtime User
Me temo que ya poco más te puedo decir, ya sólo rebuscar por el foro, esperar a algún compañero o preguntar en el foro en inglés (si necesitas una mano con la traducción, aquí estaremos).

Un post relacionado que encuentro:

saludos,
 

RAFA BRAVO

Active Member
Licensed User
Longtime User
Modificando el archivo my.ini de mySQL se puede modificar la variable max_allowed_packet y aumentar la capacidad de envío.
Pero como tú me comentaste no es recomendable la aplicación se relentiza muchísimo. He leído que puedes pasar la imagen por FTP y subir solo la ruta a la base de datos. Es la única forma. Subo mas datos con JRDC2, tendría que subir la foto separada? Gracias.
 

josejad

Expert
Licensed User
Longtime User
Subo mas datos con JRDC2, tendría que subir la foto separada? Gracias.

Hola Rafa:

Sí, tendrías que subir la foto con FTP y una vez que tengas el OK de que se ha subido correctamente, entonces puedes lanzar la consulta para actualizar los datos.
 
Top