![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
||||
|
||||
|
No has comentado que error te da y que biblioteca estas usando
Como ya se hablo hace no mucho, existen varias formas en Delphi de trabajar con Base64 El problema que tenes puede que sea por el Encoding; basicamente Base64 codifica/decodifica bytes, no necesariamente texto (string, caracteres), asi que hay que "elegir" un encoding cuando se realiza el proceso Revisa estos links que hay diferentes codigos de ejemplo, usando las bibliotecas de Indy, Soap y NetEncoding Results of DecodeBase64 only 1 Byte on Android? BASE64 Encode and Decode is not working |
|
#2
|
|||
|
|||
|
Gracias voy a revisar los links. Con soap vi q hay una libreria encdcd algo así pero como tengo un server nodejs en lugar de soap utilizo el componente tidhttp con sus funciones post get. Me ha parecido más sencillo en el tema comunicación pero me complique con esto q nunca utilicé. Lo que había probado era cargar la imagen como un stream y con encodermime codificarlo pero no se si está bien la idea.
Desde ya gracias por los aportes. |
|
#3
|
||||
|
||||
|
Independientemente de las librerías que puedan usarse, me he tomado la libertad de escribir una Unit para codificar y decodificar en BASE64 sin utilizar la API de Windows ni librerías de terceros.
Dejo aquí el código:
Espero que sea de utilidad. Saludos. |
|
#4
|
|||
|
|||
|
En ese caso lo que tendría que hacer sería pasar a cadena de texto el stream imagen y codifiicarla o decodificarla no?
|
|
#5
|
||||
|
||||
|
Las funciones codifican y de codifican. En el caso de un stream, éste se usará para el buffer binario. Las funciones se pueden modificar para aceptar stream en lugar de un array. He usado un array para que el código sea totalmente independiente de elementos externos al mismo, como la propia VCL.
Saludos. |
|
#6
|
||||
|
||||
|
Hay un bug en la unit BASE64, concretamente en Decode64, que no afecta al funcionamiento pero si altera en 1 o 2 bytes el tamaño del buffer. Vuelvo a publicar la unit completa y un ejemplo de como conseguir usar Streams.
Para usar TMemoryStream sin modificar la Unit puedes implementar algo como esto:
Saludos. |
|
#7
|
|||
|
|||
|
Muchas gracias por el aporte amigos.
Les dejo una forma que llegué con NetEncoding, la cual me resultó bastante facil(por decir porq me costo además que nunca había hecho esto). También aparece en el código el envío al servidor Node, el cual guarda en la base de datos Mysql en un campo Longblob. Hasta ahí me funcionó impecable, para decodificar la imagen nuevamente también lo hice con netencoding. En la decodificación lo que me está faltando es procesar la consulta que hago al servidor, la cual el servidor devuelve la consulta en formato json y el campo de la imagen en formato buffer, como hago para convertir el buffer a base64, estoy viendo para que el servidor lo devuelva, sino lo tengo que procesar en Delphi. ------------------------------------ decodifico
|
|
#8
|
|||
|
|||
|
Net Encoding me parece la mejor opción, estoy revisando como funcionaría exactamente, y ni bien tenga funcionando(si lo logro), subo el ejemplo.
|
|
#9
|
|||
|
|||
|
Perdón no había visto el ejemplo, lo voy a probar, muchas gracias por el aporte!!
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|