|
Página 2 de 3
|
Insertar Imagenes Campo "Blob" Mysql [SOLUCIONADO]
Autor |
Mensaje |
pittusa
Técnico Programador
Registrado: Marzo 2010
Mensajes: 157
Edad: 53 Ubicación: Barcelona
|
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
|
#11 Domingo, 26 Diciembre 2010, 22:57 |
|
|
estrella_de_galicia
Programador
Registrado: Enero 2010
Mensajes: 110
Edad: 41 Ubicación: Terrassa
|
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
|
#12 Lunes, 27 Diciembre 2010, 01:11 |
|
|
estrella_de_galicia
Programador
Registrado: Enero 2010
Mensajes: 110
Edad: 41 Ubicación: Terrassa
|
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?
=================== 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
|
#13 Martes, 28 Diciembre 2010, 11:26 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
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
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
|
#14 Martes, 28 Diciembre 2010, 19:19 |
|
|
estrella_de_galicia
Programador
Registrado: Enero 2010
Mensajes: 110
Edad: 41 Ubicación: Terrassa
|
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
Pero si me voy al MySQL Query puedo observar sin problemas el contenido:
http://fotos.subefotos.com/2e44bb2340ad32d6e47a7f2bd09283fbo.png
¿entonces, que estoy haciendo mal?
He probado con esto:
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
|
#15 Martes, 28 Diciembre 2010, 20:32 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
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
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
|
#16 Martes, 28 Diciembre 2010, 21:55 |
|
|
estrella_de_galicia
Programador
Registrado: Enero 2010
Mensajes: 110
Edad: 41 Ubicación: Terrassa
|
Re: Insertar Imagenes Campo "Blob" Mysql
De la forma que escribes el código me pierdo un poco..
yo lo estoy haciendo asi.
Si nos fijamos en la linea 8 me da el siguiente error type mismatch. wanted Blob, got String instead
=================== Saludos / Best Regards
Pedro Aguilar
http://edrossuse.blogspot.com
Desarrollador de LNXGEST
|
#17 Miercoles, 29 Diciembre 2010, 10:32 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
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)
|
#18 Miercoles, 29 Diciembre 2010, 14:39 |
|
|
estrella_de_galicia
Programador
Registrado: Enero 2010
Mensajes: 110
Edad: 41 Ubicación: Terrassa
|
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
|
#19 Martes, 04 Enero 2011, 11:32 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Insertar Imagenes Campo "Blob" Mysql
es que lo has hecho mal.
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
|
#20 Martes, 04 Enero 2011, 15:18 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 2 de 3
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|