Página 1 de 1

RESUELTO-Duda en como guardar Imagen en base de datos MySQL

Publicado: 30 Abr 2021 18:14
por Agotaras123
Que tal colegas, estoy tratando de pasar el ejemplo de R Landaeta viewtopic.php?f=12&t=7272

que usa SQLite3, pero al momento de guardar si guarda todo perfecto el problema es para poder visualizarla que no carga la imagen


dejo el código de guardar y mostrar, el código es adaptado del código del colega R Landaeta


Guardar
local Codigo = Input.GetText("InpCodigo")
local imagen = Input.GetText("inp_product");
local Image = Input.GetText("inp_name_image");
local Path = Input.GetText("inp_path_image");

if Name ~= "" then
	local inn = assert(io.open(Path, "rb"));
	local blob = inn:read("*all");
	MySQLConnection:execute("INSERT INTO "..sourcename..".imagenes(id, codigodeproducto,imagen, imageBLOB) VALUES (NULL, '"..Codigo.."','"..imagen.."','"..Image.."')")
end


Mostrar
MySQLCursor = MySQLConnection:execute("SELECT * From "..sourcename..".imagenes WHERE codigodeproducto = "..Input.GetText("InpCodigo").." ") 
for i = 1, MySQLCursor:numrows() do
   local id, codigodeproducto, imagen, imageBLOB = MySQLCursor:fetch();
		Input.SetText("inp_product", imagen)
	
		output_file = io.open("C:\\fotos\\"..imagen, "wb")
		output_file:write(imageBLOB)
		output_file:close()
	
		Image.Load("avatar","c:\\fotos\\"..imagen);
	end 


Input.SetText("id", "");




Re: Duda en como guardar Imagen en base de datos MySQL

Publicado: 01 May 2021 01:47
por R Landaeta
Agotaras123 escribió:
30 Abr 2021 18:14
Que tal colegas, estoy tratando de pasar el ejemplo de R Landaeta viewtopic.php?f=12&t=7272

que usa SQLite3, pero al momento de guardar si guarda todo perfecto el problema es para poder visualizarla que no carga la imagen


dejo el código de guardar y mostrar, el código es adaptado del código del colega R Landaeta
Hola, Douglas, ¿te sale algún error o simplemente no la muestra?

Re: Duda en como guardar Imagen en base de datos MySQL

Publicado: 01 May 2021 05:13
por Agotaras123
no muestra la imagen la descarga pero dañada

Re: Duda en como guardar Imagen en base de datos MySQL

Publicado: 01 May 2021 06:15
por Agotaras123
revisando desde mysql el código para mostrar las imagen esta bien el problema esta en el código para guardarla

que no guarda correctamente la imagen por ello no se muestra.


puse tu codigo y lo adapte un poco para mysql pero no guarda la imagen

local Codigo = Input.GetText("InpCodigo")
local imagen = Input.GetText("inp_product");
local Image = Input.GetText("inp_name_image");
local Path = Input.GetText("inp_path_image");



local inn = assert(io.open(Path, "rb"));
	local blob = inn:read("*all");
	local q=("INSERT INTO "..sourcename..".imagenes (id, codigodeproducto,imagen, imageBLOB)".."VALUES(NULL,'"..Codigo.."','"..imagen.."', '"..Path.."')")
	local stm = MySQLConnection:execute(q)
	if stm then
		stm:bind_blob(1, blob)
		stm:step()
		stm:finalize()
		Dialog.Message("New data", "The data was saved successfully.", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
	else
		Dialog.Message("Error:",products_db:error_message());
	end

Re: Duda en como guardar Imagen en base de datos MySQL

Publicado: 02 May 2021 05:55
por Agotaras123
dejo el apz del ejemplo malo claro porque no doy como es que se guardan las imagenes en BLOB

Código: Seleccionar todo

https://www.dropbox.com/s/r784iz1bf6ii6q6/Guardar%20Imagen%20en%20MySQL.apz?dl=0

Re: Duda en como guardar Imagen en base de datos MySQL

Publicado: 02 May 2021 08:24
por pexabosh
Hola,
La imagen se descarga dañada, porque io.read retorna strings con codificación diferente a la codificación por defecto usada en MySQL, por lo que no se recomienda usarlo, en su lugar te recomiendo transformar el archivo a texto plano con Base64. Y subirlo a la base de datos:

> Subir archivo:
local Content = Crypto.Base64EncodeToString("Image.png", 0)
local SaveAs = "Sample"
MySQLCursor = MySQLConnection:execute("INSERT INTO Images ('Name', 'Content') VALUES ('"..SaveAs.."', '"..Content.."')")
Reemplazar "Image.png" por el archivo que queremos subir, y "Sample" por el nombre con el que queremos identificar ese archivo.

> Descargar archivo:
local ImageName = "Sample"
local SaveAs = "Image.png"
MySQLCursor = MySQLConnection:execute("SELECT * FROM Images WHERE Name = '"..ImageName.."'")
if MySQLCursor:numrows() ~= 0 then
	Crypto.Base64DecodeFromString(MySQLCursor:fetch({}, "a").Content, SaveAs)
else
	Dialog.Message("Error", "File not found.")
end
Reemplazar "Sample" por el archivo que queremos descargar, y "Image.png" por la ruta donde se guardara.

No te recomiendo subir archivos como texto en una base de datos, una imagen de 5MB puede llegar a tardar 20 segundos en servidores como db4free.net, en su lugar usa FTP para enviar archivos y almacenarlos directamente en tu host

Espero que te sirva. Saludos :pc:

Re: Duda en como guardar Imagen en base de datos MySQL

Publicado: 02 May 2021 08:28
por pexabosh
Agotaras123 escribió:
02 May 2021 05:55
Dejo el APZz del ejemplo malo claro porque no doy como es que se guardan las imagenes en BLOB
BLOB es solo un tipo de dato, que permite almacenar valores grandes y descargarlos de una manera más eficaz, pero no recomiendo que almacenes así las imágenes.

Re: Duda en como guardar Imagen en base de datos MySQL

Publicado: 02 May 2021 19:50
por Agotaras123
pexabosh escribió:
02 May 2021 08:24
Hola,
La imagen se descarga dañada, porque io.read retorna strings con codificación diferente a la codificación por defecto usada en MySQL, por lo que no se recomienda usarlo, en su lugar te recomiendo transformar el archivo a texto plano con Base64. Y subirlo a la base de datos:

> Subir archivo:
local Content = Crypto.Base64EncodeToString("Image.png", 0)
local SaveAs = "Sample"
MySQLCursor = MySQLConnection:execute("INSERT INTO Images ('Name', 'Content') VALUES ('"..SaveAs.."', '"..Content.."')")
Reemplazar "Image.png" por el archivo que queremos subir, y "Sample" por el nombre con el que queremos identificar ese archivo.

> Descargar archivo:
local ImageName = "Sample"
local SaveAs = "Image.png"
MySQLCursor = MySQLConnection:execute("SELECT * FROM Images WHERE Name = '"..ImageName.."'")
if MySQLCursor:numrows() ~= 0 then
	Crypto.Base64DecodeFromString(MySQLCursor:fetch({}, "a").Content, SaveAs)
else
	Dialog.Message("Error", "File not found.")
end
Reemplazar "Sample" por el archivo que queremos descargar, y "Image.png" por la ruta donde se guardara.

No te recomiendo subir archivos como texto en una base de datos, una imagen de 5MB puede llegar a tardar 20 segundos en servidores como db4free.net, en su lugar usa FTP para enviar archivos y almacenarlos directamente en tu host

Espero que te sirva. Saludos :pc:

probé tu código si guarda la imagen en base64 pero al momento de descargarla la descarga corrupta no se puede visualizar

Re: Duda en como guardar Imagen en base de datos MySQL

Publicado: 03 May 2021 00:13
por pexabosh
Entonces tu base de datos esta limitada, prueba cambiar el tipo de dato a BLOB

Re: Duda en como guardar Imagen en base de datos MySQL

Publicado: 03 May 2021 02:05
por Agotaras123
esta en blob y es un localhost

Tabla
Imagen

Boton Guardar
Imagen

Boton Mostrar
Imagen


Foto Guardada dañada
Imagen

La imagen en la tabla en binario
Imagen

Re: Duda en como guardar Imagen en base de datos MySQL

Publicado: 03 May 2021 06:06
por Agotaras123
Resuelto el problema era a la hora de llamar el contenido de la imagen dejo el APZ con las correcciones

Código: Seleccionar todo

https://www.dropbox.com/s/r784iz1bf6ii6q6/Guardar%20Imagen%20en%20MySQL.apz?dl=0
ya funicona correctamente, solo coloquen los datos de su servidor Mysql y creen la base de datos

dejo codigo de la tabla.

Código: Seleccionar todo

CREATE TABLE `imagenes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `codigodeproducto` mediumtext,
  `imagen` mediumtext,
  `imageBLOB` mediumblob,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1;

Re: Duda en como guardar Imagen en base de datos MySQL

Publicado: 17 Jul 2021 06:29
por R Landaeta
Agotaras123 escribió:
03 May 2021 06:06
Resuelto el problema era a la hora de llamar el contenido de la imagen dejo el APZ con las correcciones

Código: Seleccionar todo

https://www.dropbox.com/s/r784iz1bf6ii6q6/Guardar%20Imagen%20en%20MySQL.apz?dl=0
ya funicona correctamente, solo coloquen los datos de su servidor Mysql y creen la base de datos

dejo codigo de la tabla.

Código: Seleccionar todo

CREATE TABLE `imagenes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `codigodeproducto` mediumtext,
  `imagen` mediumtext,
  `imageBLOB` mediumblob,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1;
Gracias, Douglas. :friends: Excelente como siempre.

Re: Duda en como guardar Imagen en base de datos MySQL

Publicado: 20 Mar 2023 20:55
por luasqlite
R Landaeta escribió:
17 Jul 2021 06:29
Agotaras123 escribió:
03 May 2021 06:06
Resuelto el problema era a la hora de llamar el contenido de la imagen dejo el APZ con las correcciones

Código: Seleccionar todo

https://www.dropbox.com/s/r784iz1bf6ii6q6/Guardar%20Imagen%20en%20MySQL.apz?dl=0
ya funicona correctamente, solo coloquen los datos de su servidor Mysql y creen la base de datos

dejo codigo de la tabla.

Código: Seleccionar todo

CREATE TABLE `imagenes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `codigodeproducto` mediumtext,
  `imagen` mediumtext,
  `imageBLOB` mediumblob,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1;
Gracias, Douglas. :friends: Excelente como siempre.
Si es recomendable colocar imágenes en un bd, no se cargara mucho

Re: RESUELTO-Duda en como guardar Imagen en base de datos MySQL

Publicado: 21 Mar 2023 00:23
por Agotaras123
todo depende de como gestiones tus bases de datos y de que manera se realicen las peticiones a la misma, es bueno y no es bueno tambien se toma en cuenta el servidor donde tenes la base de datos hay muchos factores a tomar en cuenta antes de decir si es bueno o no, si es un sistema que tendran muchas peticiones a la vez y lo tienes en una computadora basica y la red esta mal estructurada todo sera lento, como te comento depende de muchos factores.