Saludos estimados,
Necesito grabar una imagen .PNG en un campo de una tabla MySql y luego recuperarla para mostrarla.
Quien me da alguna orientación?
Grabar imagen en tabla mysql
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Grabar imagen en tabla mysql
"Los errores en programación, siempre están entre la silla y el teclado..."
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Re: Grabar imagen en tabla mysql
Por alguna razón un PNG cuando lo convertimos a string queda muy grande y al guardarlo en mysql
se cae el sistema.
Pero hay una solución , en el siguiente link lo explica bien el amigo Juan Navas
https://forums.fivetechsupport.com/view ... t=GETPAGES
saludos
se cae el sistema.
Pero hay una solución , en el siguiente link lo explica bien el amigo Juan Navas
https://forums.fivetechsupport.com/view ... t=GETPAGES
saludos
Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
- Marco Augusto
- Posts: 144
- Joined: Wed Oct 12, 2005 1:03 pm
- Location: Cuernacava, Morelos Mexico
Re: Grabar imagen en tabla mysql
Yo guardo archivos de todo tipo en mysql como binarios en campos del tipo "long text"
Primero se debe configurar Mysql para que lo permita
Desde el administrador de Mysql entras en Startup variables
Debes entrar en modo localhost y ejecutar como administrador
vas a la ceja Advanced Networking
en el apartado Data / Memory Size
le cambias a Max Packed size (yo le puse 16M)
Para subir un archivo cualquiera
FUNCTION GUARDADIR(cFILE,cTIPO)
APROG :=DIRECTORY(cFILE)
PUBLIC PROGNOM:=APROG[1,1]
PUBLIC PROGTAM:=APROG[1,2]
PUBLIC PROGFEC:=APROG[1,3]
PUBLIC PROGHRS:=APROG[1,4]
*
cFileG := StrToHex(MemoRead(cFILE))
*
cCMDVAL :=""
cCmdSql := "INSERT INTO PROGRAMA(TIPO,ARCHIVO,NOMBRE,FECHA,TAMA,HORA) VALUES( "
cCMDVAL := cCMDVAL+"'"+cTIPO +"', "
cCMDVAL := cCMDVAL+"'"+cFileG +"', "
cCMDVAL := cCMDVAL+"'"+cFILE +"', "
cCMDVAL := cCMDVAL+"'"+DToS(PROGFEC)+"',"
cCMDVAL := cCMDVAL+"'"+Str(PROGTAM) +"',"
cCMDVAL := cCMDVAL+"'"+PROGHRS+"' );"
IF !EJECUTA(cCmdSql+cCMDVAL)
MsgStop("ERROR AL GRABAR ARCHIVO "+cFILE ,"AVISO")
RETURN(.F.)
ENDIF
RETURN(.T.)
PARA RECUPERAR
FUNCTION EDATOS(cDAT,cNOM)
cARCH=HexToStr(cDAT)
ASALIDA:=".\"+cNOM
hFile := FCreate(asalida)
FWrite( hFile, cARCH)
FClose( hFile )
RETURN NIL
Primero se debe configurar Mysql para que lo permita
Desde el administrador de Mysql entras en Startup variables
Debes entrar en modo localhost y ejecutar como administrador
vas a la ceja Advanced Networking
en el apartado Data / Memory Size
le cambias a Max Packed size (yo le puse 16M)
Para subir un archivo cualquiera
FUNCTION GUARDADIR(cFILE,cTIPO)
APROG :=DIRECTORY(cFILE)
PUBLIC PROGNOM:=APROG[1,1]
PUBLIC PROGTAM:=APROG[1,2]
PUBLIC PROGFEC:=APROG[1,3]
PUBLIC PROGHRS:=APROG[1,4]
*
cFileG := StrToHex(MemoRead(cFILE))
*
cCMDVAL :=""
cCmdSql := "INSERT INTO PROGRAMA(TIPO,ARCHIVO,NOMBRE,FECHA,TAMA,HORA) VALUES( "
cCMDVAL := cCMDVAL+"'"+cTIPO +"', "
cCMDVAL := cCMDVAL+"'"+cFileG +"', "
cCMDVAL := cCMDVAL+"'"+cFILE +"', "
cCMDVAL := cCMDVAL+"'"+DToS(PROGFEC)+"',"
cCMDVAL := cCMDVAL+"'"+Str(PROGTAM) +"',"
cCMDVAL := cCMDVAL+"'"+PROGHRS+"' );"
IF !EJECUTA(cCmdSql+cCMDVAL)
MsgStop("ERROR AL GRABAR ARCHIVO "+cFILE ,"AVISO")
RETURN(.F.)
ENDIF
RETURN(.T.)
PARA RECUPERAR
FUNCTION EDATOS(cDAT,cNOM)
cARCH=HexToStr(cDAT)
ASALIDA:=".\"+cNOM
hFile := FCreate(asalida)
FWrite( hFile, cARCH)
FClose( hFile )
RETURN NIL
Marco Augusto Rodriguez Manzo
FWH January 2020 Xharbour 1.2.3
MySQL 5.0.19 Fastreport
PERZO SOFT
Sistemas Personalizados
FWH January 2020 Xharbour 1.2.3
MySQL 5.0.19 Fastreport
PERZO SOFT
Sistemas Personalizados
- Willi Quintana
- Posts: 1023
- Joined: Sun Oct 09, 2005 10:41 pm
- Location: Cusco - Perú
- Contact:
Re: Grabar imagen en tabla mysql
MI estimado,,,,
Code: Select all | Expand
If lModImg
Function GrabarFoto(cLogo) // ruta completa de la imagen
cChr := StrToHex(MemoRead( cLogo ) ) // tiene que estar en archivo
oCn:Update( "general", {"logotipo"}, {cChr}, "registro = " + cReg ) // guardar en MEDIUMBLOB
EndIf
Return(NIl)
Code: Select all | Expand
Function LeerLogotipo(oCn, oImagen, lBmp)
local cDat, oDat, cIMg, cFilRt, nHnd, oImg
DEFAULT lBmp := .f.
cDat := "SELECT logotipo FROM general LIMIT 1"
oDat := SQLQry(oCn, oDat, cDat)
If EMPTY(oDat:logotipo)
Return(oImagen)
EndIf
oImg := oDat:logotipo
IF !EMPTY(oImg)
TRY
cImg := HexToStr(oImg)
CATCH
Return(oImagen)
END
If !lBmp
oImagen:SetSource(cImg)
Else
oImagen:LoadImage(cImg)
Endif
EndIf
Return(oImagen)
Re: Grabar imagen en tabla mysql
Otra opción
Para recuperarla
Code: Select all | Expand
cRutaFoto := "c:\miruta\imagen.png"
rutaTXT := "c:\miruta\imagen.txt"
fMimeEnc( cRutaFoto, rutaTXT ) //Convertimos la imagen o cualquier archivo, en texto base64
cText := MemoRead( rutaTXT ) //Recuperamos el texto
cText := STRTRAN(cText,CRLF,'') //Lo limpiamos
y con esta variable cText a la base de datos en un campo de tipo MEDIUMTEXT
Code: Select all | Expand
cVar:= "SELECT * FROM tabla WHERE campo=variable"
oRs := FW_OPENRECORDSET(oCn,cVar,adLockOptimistic,adOpenKeyset)
if oRs:RecordCount()#0
uArch := hb_base64decode( oRs:Fields("campo"):Value )
oFto:SetSource( uArch ) //Aqui la asigamos al objeto ximage, pero la puedes colocar si quieres en el disco duro
oFto:refresh()
else
oFto:SetSource( cRutaNoF )
oFto:refresh()
endif
oRs:close()
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Re: Grabar imagen en tabla mysql
Estimados amigos.
Saludos a todos,
Muchas gracias a quienes me sugirieron ideas a mi pregunta.
Después de verlas todas, me decanté por la opción de leandro, que me pareció la mas sencilla. Después de adaptarla a mi sistema, quedó muy bien.
Ciertamente, he leido en internet diversas opiniones y todas apuntan a que lo mejor es guardar las imágenes en carpetas de disco, bien sea en la nube o localmente.
Se dice de que guardarlas en tablas finalmente termina generando problemas, aunque no especifican que tipo de problemas.
Esperaré a ver como se comporta y el feed back del cliente,
Una vez más, muchas gracias a todos.!
Saludos a todos,
Muchas gracias a quienes me sugirieron ideas a mi pregunta.
Después de verlas todas, me decanté por la opción de leandro, que me pareció la mas sencilla. Después de adaptarla a mi sistema, quedó muy bien.
Ciertamente, he leido en internet diversas opiniones y todas apuntan a que lo mejor es guardar las imágenes en carpetas de disco, bien sea en la nube o localmente.
Se dice de que guardarlas en tablas finalmente termina generando problemas, aunque no especifican que tipo de problemas.
Esperaré a ver como se comporta y el feed back del cliente,
Una vez más, muchas gracias a todos.!
"Los errores en programación, siempre están entre la silla y el teclado..."
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.