Hola buen día cómo están, saben que estoy desarrollando una app fiori entonces le envío mi imagen base64 algo asi ("data:image/png;base64,iVBORw0KGg...EAAAAASUVORK5CYII=")
entonces mi odata recibe ese base64 como xstring y lo que hago a continuacion es cortar el inicio de mi base 64 y quitarle las comillas de la siguiente forma:
paso mi xstring a tabla binaria con SCMS_XSTRING_TO_BINARY
de tabla binaria obtengo el string con SCMS_BINARY_TO_STRING
obtengo el string algo como esto: "data:image/png;base64,iVBORw0KGg...EAAAAASUVORK5CYII=" (incluiyendo las comillas)
y hago lo siguiente:
entonces obtengo mi base64 algo como esto: iVBOR....gg==
decodifico ese base64 con la clase if_http_utility de la siguiente forma:
y esto lo guardo en la al11 de la sigueitne forma
Mi problema que luego de guardar todo bien en la al11 descargo mi a rchivo con CG3Y luego de descargado lo abro con el visualizador de imagenes de windows pero me dice: El archivo xxxx Parece que el formato de este archivo no es compatible.
Yo creo que mi problema es quizas deba hacer un paso previo o algo por el estilo. Intente quitarle las comillas y guardar la tabla de binario con un loop pero no me ufnciono. Alguien tiene experiencia en esto ???
entonces mi odata recibe ese base64 como xstring y lo que hago a continuacion es cortar el inicio de mi base 64 y quitarle las comillas de la siguiente forma:
paso mi xstring a tabla binaria con SCMS_XSTRING_TO_BINARY
de tabla binaria obtengo el string con SCMS_BINARY_TO_STRING
obtengo el string algo como esto: "data:image/png;base64,iVBORw0KGg...EAAAAASUVORK5CYII=" (incluiyendo las comillas)
y hago lo siguiente:
Código:
replace all occurrences of regex '["]' in string with ''. split string at ',' into data(dummy) string.
decodifico ese base64 con la clase if_http_utility de la siguiente forma:
Código:
DATA: ld_rawurl type string. DATA: lo_httputil TYPE REF TO if_http_utility. CREATE OBJECT lo_httputil TYPE cl_http_utility. ld_rawurl = string. " base64 ld_rawurl = lo_httputil->decode_base64( ld_rawurl ).
Código:
open dataset lv_path for output in binary mode message lv_msg.
if sy-subrc eq 0.
mensaje = 'S'.
transfer ld_rawurl to lv_path.
close dataset lv_path.
else.
mensaje = 'E'.
endif.
Yo creo que mi problema es quizas deba hacer un paso previo o algo por el estilo. Intente quitarle las comillas y guardar la tabla de binario con un loop pero no me ufnciono. Alguien tiene experiencia en esto ???