Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 2 de 3
Ir a la página Anterior  1, 2, 3  Siguiente
 
Insertar Imagenes Campo "Blob" Mysql [SOLUCIONADO]
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Re: Insertar Imagenes Campo "Blob" Mysql 
 
jsban se piensa que nos ba a engañar ahora

Pero quien se va acreer que no sabes que es blob?

yo se lo que es a mi manera.

el nombre que le dan a un campo de una base de datos que puede contener imágenes.

txt
numeric
datatime

y también blob.

ha estas alturas ya lo habrás puesto en google. (buscar blob)
buscar blob

con esos pedazos de tutoriales que te curras con videos y todo haber si nos haces uno del blob.

bromas a parte.

la verdad es que no se utilizarlo muy bien, se que consegui meter imágenes en la base pero usando un archivo temporal.

pero cuando tenia 2000 imágenes mi base se caia y decidí utilizar rutas.

se me olvidaba decir que las imágenes eran de 100k
también lo he probado en PostgreSQL
 



 
última edición por pittusa el Domingo, 26 Diciembre 2010, 23:17; editado 3 veces 
pittusa - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Insertar Imagenes Campo "Blob" Mysql 
 
He realizado el siguiente script por linea de comandos

#!/usr/bin/env bash

echo usuario $1
echo password $2
echo extension $3
echo ruta $4

mysql -u $1 -p$2 -h127.0.0.1 --raw -Dtesticonian --skip-column-names -e "select icono from tipoarchivo where extension = '$3' ; " > $4
 


De esta forma me exporta el supuesto "imagen.png" pero estamos en las mismas, me dice que archivo corrupto. En cambio si lo abro a traves del MySQL Query, puedo ver la imagen perfectamente.

También he probado con y sin elparametro "--raw"

P.D: Añadi la imagen desde el MySQL Query y lo que quiero es poder visualizar la imagen (pero podrá ser cualquier otro archivo de texto, imagenes etc)
 




===================
Saludos / Best Regards

Pedro Aguilar

http://edrossuse.blogspot.com
Desarrollador de LNXGEST
 
última edición por estrella_de_galicia el Lunes, 27 Diciembre 2010, 01:13; editado 1 vez 
estrella_de_galicia - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Insertar Imagenes Campo "Blob" Mysql 
 
He encontrado como exportar un archivo del campo BLOB pero desde php, es dcir, desde un navegador y os  coloco un poco asi por encima el script php

<?php
header("Content-Type: application/x-bittorrent");
header('Content-Disposition: attachment; filename="otronombre.extension"');
echo $archivo;  


Si nos fijamos añade una cabecera con el tipo de documento que es (linea 1), y el nombre del archivo (linea 2) y justo a continuación el contenido del campo bBLOB (linea 3)

El problema esta por varios sitios:
1.- Todos los ejemplos que encuentro para la exportación de archivos de campos BLOB es a través de php
2.- ¿Añado un componente web browser para poder abrir los documentos utilizando algún script en php? (lo que me obliga a instalar apache en el serviior de la aplicación)

Por otro lado lo que veo es que si utilizo el script que he citado anteriormente y que me exporta el contenido del campo BLOB y le añado la forma de añadir a cabecera al archivo... ¿podré visualizarlo correctamente? y si es asi, ¿como lo hago?

383bf7a08f2885aad9c3deea633e3066o
 




===================
Saludos / Best Regards

Pedro Aguilar

http://edrossuse.blogspot.com
Desarrollador de LNXGEST
 
última edición por estrella_de_galicia el Martes, 28 Diciembre 2010, 11:46; editado 2 veces 
estrella_de_galicia - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Insertar Imagenes Campo "Blob" Mysql 
 
No acabo de entender el problema. Miro en GambasWiki y parece ser fácil.

Pongamos que yo tengo en una tabla T un registro con una clave única 'código' en el que hay un campo blob llamado B.

Deseo hacer un update y meter en B un pdf que tengo por ahí.

lo pongo en notación de gambas para que el código le valga lo mismo a los de sqlite o mysql, pero funciona igual con sql obviamente.

dim Fichero as string
Fichero=file.load("mipdf.pdf")
Rs=cn.edit("T","codigo=&1",pidecodigo.text)
rs!B=fichero
rs.update


Por la misma razón el caso contrario. Busco un registro y dejo el blob en un archivo
Dim contenido as string, fich as FILE
rs=cn.find("T","codigo=&1",pidecodigo.text)
Contenido=rs!B

fich=open "mipdf.pdf" for create
write #fich,contenido,len(contenido)
close #fich


Os dejo aquí un código que vi en gambaswiki

' This function is called by a button, show a dialog Box for the file selection and then insert into the table's blob field the file contents
PUBLIC SUB select_and_insert_into_blob_field_a_file()

  DIM hFile AS File
  DIM sLine AS String
  DIM outs AS blob
  DIM path AS String
  DIM hResult AS Result

  Dialog.Filter = ["*", "All Files"]
  Dialog.Title = "Select the file to insert into the BLOB field"

  IF Dialog.OpenFile() THEN RETURN
  path = Dialog.path
  sLine = File.Load(Dialog.Path)

  IF NOT $hConn.Opened THEN $hConn.Open

  hResult = DB.Create("table")  ' Table name
  hResult!blob = sLine          ' blob is the name of the blob field in the table
  hResult!filename = path       ' filename is a string field in the table
  hResult.Update

  $hConn.Commit
  $hConn.Close
...

END



Gambas y ODBC
 



 
última edición por soplo el Martes, 28 Diciembre 2010, 19:22; editado 3 veces 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Insertar Imagenes Campo "Blob" Mysql 
 
En tiempo de ejecuciíon puedo "leer" el campo y me pone lo siguiente:
http://fotos.subefotos.com/3509a702fbe8074577ae0c6da53be8dfo.png
3509a702fbe8074577ae0c6da53be8dfo

Pero si me voy al MySQL Query puedo observar sin problemas el contenido:
http://fotos.subefotos.com/2e44bb2340ad32d6e47a7f2bd09283fbo.png
2e44bb2340ad32d6e47a7f2bd09283fbo

¿entonces, que estoy haciendo mal?

He probado con esto:
Dim contenido as string, fich as FILE
rs=cn.find("T","codigo=&1",pidecodigo.text)
Contenido=rs!B

fich=open "mipdf.pdf" for create
write #fich,contenido,len(contenido)
close #fich


Pero me pasa exactamente lo mismo, me dice que el archivo está corrupto

Añado:

He probado a insertar el archivo sde mi aplicación gambas por si fuera error de la importanción en lugar de hacerlo con el MySQL Query con la siguiente secuencia SQL:

INSERT INTO TABLA (Campo1, CampoBLOB) VALUES ('texto', LOAD_FILE('/ruta/del/archivo.extension'))


Lo ha importado bien y lo puedo visualizar en MySQL Query, pero a la hora de exportar el archivo estamos en las mismas
 




===================
Saludos / Best Regards

Pedro Aguilar

http://edrossuse.blogspot.com
Desarrollador de LNXGEST
 
última edición por estrella_de_galicia el Martes, 28 Diciembre 2010, 21:43; editado 3 veces 
estrella_de_galicia - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Insertar Imagenes Campo "Blob" Mysql 
 
Ya lo he conseguido.

Además de string, gambas tiene otro tipo de datos llamado blob. Este tipo de datos tiene dos métodos
.data devuelve su contenido
.length devuelve su longitud.

Pongamos una rutina que escribe en un campo blob y luego lee
Dim Rs as result, Cn as connection, f as file
Dim Dato as blob, Valor as string
'cargar el balon.png dentro de un campo blob
rs = cn.Create("prueba")
  rs!ElBlob = File.Load(User.Home &/ "balon.png")
  rs.update
 
  

Ahora buscar el recién insertado y extraer el contenido de su campo blob a un archivo
  rs = cn.Exec("select last_insert_id() as reg")
  rs = cn.Find("prueba", "codigo=&1", rs!reg)
    Dato = rs!ElBlob
    valor = Dato.Data 'meter el contenido del blob en un string
    f = OPEN User.home &/ "prueba.png" FOR CREATE
    WRITE #f, valor, Dato.Length 'la longitud del blob se encuentra en Dato.length
    CLOSE (f)


De hecho no necesitaba el string. Podría haber grabado directamente
    f = OPEN User.home &/ "prueba.png" FOR CREATE
    WRITE #f, Dato.data, Dato.Length 'la longitud del blob se encuentra en Dato.length
    CLOSE (f)[/code]

Esto funciona OK
 
 



 
última edición por soplo el Martes, 28 Diciembre 2010, 21:57; editado 2 veces 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Insertar Imagenes Campo "Blob" Mysql 
 
De la forma que escribes el código me pierdo un poco..

yo lo estoy haciendo asi.
Código: [Descargar] [Ocultar]
  1. DIM RS AS Result
      
  2. DIM Dato AS Blob
      
  3. DIM Valor AS String
      
  4. DIM f AS File
      
  5.  
  6. RS = modlnxgest.$Con.Exec("select * from tipoarchivo where icono = 'PDF'") 
      
  7.  
  8. Dato = RS["campoblob"]
      
  9. Valor = Dato.Data
      
  10.  
  11. f = OPEN User.home & "/prueba.png" FOR CREATE
      
  12.     WRITE #f, Dato.data, Dato.Length 'la longitud del blob se encuentra en Dato.length
      
  13.     CLOSE (f)


Si nos fijamos en la linea 8 me da el siguiente error type mismatch. wanted Blob, got String instead
87df21f44335c910762907ea2d8fb3cco
 




===================
Saludos / Best Regards

Pedro Aguilar

http://edrossuse.blogspot.com
Desarrollador de LNXGEST
 
estrella_de_galicia - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Insertar Imagenes Campo "Blob" Mysql 
 
quizá es que el write no admite dato.data. Puede ser, no lo probé.

En cualquier caso tu mueves el campo blob a un string de esta forma
dato=rs!campoblob

y ahora en daato (que es de tipo blob) tienes
dato.data que te devuelve el conetnido
dato.length que te devuelve su longitud

Lo que yo vi que funciona bien es pasar el contenido a una variable string
varstring=dato.data
y con eso ya puedes hacer lo que quieras.

Intuyo que esta solución no es completa porque un campo blob puede contener mucho texto y dudo que un string puea ser tan grande, pero eso al menos funciona bien.

Prueba así
#  f = OPEN User.home & "/prueba.png" FOR CREATE
#    WRITE #f, Valor, Dato.Length 'la longitud del blob se encuentra en Dato.length
#    CLOSE (f)


 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Insertar Imagenes Campo "Blob" Mysql 
 
ya casi lo tengo pero... NO

DIM RS AS Result
DIM Longitud AS Integer
DIM Valor AS String
DIM f AS File

RS = modlnxgest.$Con.Exec("select doc from tipoarchivo where icono = 'PDF'")
Valor = RS["doc"]

RS = modlnxgest.$Con.Exec("select OCTET_LENGTH(doc) as doc from tipoarchivo where icono = 'PDF'")  
Longitud = RS["doc"]


 f = OPEN User.home & "/prueba.png" FOR CREATE
    WRITE #f, Valor, Longitud 'la longitud del blob se encuentra en Dato.length
    CLOSE (f)
 


Si nos fijamos he conseguido saber la longitud mediante mysql, me exporta el supuesto archivo pero me da error a la hora de abrirlo.
¿Alguien sabe que más puedo hacer para exportar lo del campo blob?

También he probado a usar esta SQL para poder exportar el contenido data del campo blob:

SELECT CONVERT(doc, BINARY) AS doc FROM tipoarchivo WHERE icono = 'PDF'

 




===================
Saludos / Best Regards

Pedro Aguilar

http://edrossuse.blogspot.com
Desarrollador de LNXGEST
 
última edición por estrella_de_galicia el Martes, 04 Enero 2011, 11:52; editado 2 veces 
estrella_de_galicia - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Insertar Imagenes Campo "Blob" Mysql 
 
es que lo has hecho mal.

DIM RS AS Result
DIM Longitud AS Integer
DIM Valor AS Blob
DIM f AS File
DIM Longitud as integer
DIM ElPdf as string

RS = modlnxgest.$Con.Exec("select doc from tipoarchivo where icono = 'PDF'")
Valor = RS["doc"] 'valor es de tipo blob

'La longitud está en
Longitud=Valor.length
'El dato está en
ElPdf=Valor.data
f=open "archivo.pdf" for create
write #f,ElPdf,Longitud
close #f


Esto funciona bien. Lo probé y conseguí meter un png en una tabla, luego hacer una consulta, extraer el campo y crear un fichero png que contenía la imagen.

Mi duda está en el caso de que el campo blob tenga una longitud MUY grande y no quepa en un string. Si llega el caso ya veré, pero eso funciona muy bien.
 



 
última edición por soplo el Martes, 04 Enero 2011, 15:19; editado 2 veces 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Un Detalle Con El Insert Into Gambas Value... jousseph Bases de Datos 5 Domingo, 04 Noviembre 2012, 20:58 Ver último mensaje
Shell
No hay nuevos mensajes PhP Y Mysql: Borrado De Registros "so... jsbsan PHP 9 Miercoles, 01 Octobre 2014, 23:14 Ver último mensaje
jguardon
No hay nuevos mensajes Insertar Un Campo Blob En Gambas. ramon_661 Bases de Datos 5 Domingo, 28 Agosto 2016, 08:12 Ver último mensaje
shordi
No hay nuevos mensajes Duda Con Campo "Fecha" En SQLite gambafeliz Bases de Datos 2 Miercoles, 21 Agosto 2019, 06:23 Ver último mensaje
gambafeliz
 

Publicar nuevo tema  Responder al tema  Página 2 de 3
Ir a la página Anterior  1, 2, 3  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron