[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Base64 decode of a PNG file
Hello,
I call a Fedex webservice in order to retrieve a document in PNG format
and print it.� But this document is base64 encoded.� Thanks to Scott's HTTPAPI I can call the webservice and parse the right
XML element into a file in IFS.
So at this time I have a binary file in IFS:
-�/tmp/fedex.bin ==>�CCSID 819
- if I �copy/paste it in a online internet decoder I have no problem
in getting back the PNG� - but on the AS400 I have no luck:
� - I've tried the openssl (opened QSHELL and put "openssl base64 -d
-in /tmp/fedex.bin -out /tmp/fedex.png �") ==> the result is a
fedex.png with 0 bytes;
� - I've tried Scott's base64_decode (reading the IFS and writing the
result in IFS) �==> same result, a fedex.png with 0 bytes;
What I'm doing wrong...? :(
Thank you in advance for your help.
Here below the program using Scott's base64_decode (sorry in advance if
my code is a mess...it is only a draft version..proof of concept kind
of...):
H DFTACTGRP(*NO) BNDDIR('BASE64':'QC2LE') � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/copy BASE64_H � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/copy httpapi_h � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� �/copy ifsio_h � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � D BASE64DATA � � �s � � � � � � 72A � DIM(43) CTDATA
PERRCD(1) � � � � � � � � � �� D ReportError � � PR � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � D IFS_file2Var � �pr � � � � 65535a � varying � � � � � � � � � � � � � � � � � � � D �pFile � � � � � � � � � � � 256a � value � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � D InputData � � � s � � � � �32767A � varying � � � � � � � � � � � � � � � � � � � D OutputData � � �s � � � � �32767A � varying � � � � � � � � � � � � � � � � � � � d decdata � � � � s � � � � �32764a � � � � � � � � � � � � � � � � � � � � � � � � d decoded � � � � s � � � � �32764a � � � � � � � � � � � � � � � � � � � � � � � � d declen � � � � �s � � � � � � 10i 0 � � � � � � � � � � � � � � � � � � � � � � � d len � � � � � � s � � � � � � 10i 0 � � � � � � � � � � � � � � � � � � � � � � � D outputfile � � �s � � � � � �200A � � � � � � � � � � � � � � � � � � � � � � � D outfile � � � � s � � � � � � 10I 0 � � � � � � � � � � � � � � � � � � � � � � d rc � � � � � � �s � � � � � � 10i 0 � � � � � � � � � � � � � � � � � � � � � � d i � � � � � � � s � � � � � � 10i 0 � � � � � � � � � � � � � � � � � � � � � � D fd � � � � � � �S � � � � � � 10I 0 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � // Declare the files � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � InputData = IFS_file2Var('/tmp/fedex.bin'); � � � � � � � � � � � � � � � � � � � len = %len(InputData); � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � outputfile = '/tmp/fedex.png'; � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � // Prepare the OUT file � � � � � � � � � � � � � � � � � � � � � � � � � � � � � fd = open(outputfile � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � : O_WRONLY+O_CREAT+O_TRUNC+O_CCSID � � � � � � � � � � � � �� � � � � � � � � � � : S_IRGRP + S_IWGRP + S_IXGRP + � � � � � � � � � � � � � � � � � � � � � � � � � � �S_IRUSR + S_IWUSR + S_IXUSR � � � � � � � � � � � � � � �� � � � � � � � � � � : 819); � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � callp close(fd); � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � �fd = open(outputfile:O_WRONLY+O_TEXTDATA); � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �// decode InputData � � � � � � � � � � � � � � � � � � � � � � � �� � � �declen = base64_decode(%addr(InputData : *DATA ) � � � � � � � � � � � � � � � � � � � � � � � �: len � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � �: %addr(OutputData : *DATA )
� � � � � � � � � � � � � � � � � � � � � � �: %len(OutputData)); � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �// write it � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � �callp write(fd: %addr(OutputData): %len(OutputData)); � � � � � � �� � � �callp close(fd); � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �*inlr = *on; � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �**** IFS ==> variable pgm � � � � � � � � � � � � � � � � � � � � � P IFS_file2Var � �b � � � � � � � � � export � � � � � � � � � � �� D IFS_file2Var � �pi � � � � 65535a � varying � � � � � � � � � � � D �pFile � � � � � � � � � � � 256a � value � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � D open � � � � � �pr � � � � � �10i 0 extproc('open') � � � � � � � D �filename � � � � � � � � � � � * � value
options(*string) � � �� D �openflags � � � � � � � � � �10i 0 value � � � � � � � � � � � � D �mode � � � � � � � � � � � � 10u 0 value
options(*nopass) � � �� D �codepage � � � � � � � � � � 10u 0 value options(*nopass)
� � �� D �creatcnvid � � � � � � � � � 10u 0 value options(*nopass)
� � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � D read � � � � � �pr � � � � � �10i 0 extproc('read') � � � � � � � D �handle � � � � � � � � � � � 10i 0 value � � � � � � � � � � � � D �buffer � � � � � � � � � � � � * � value � � � � � � � � � � � � D �bytes � � � � � � � � � � � �10u 0 value � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � D close � � � � � pr � � � � � �10i 0 extproc('close') � � � � � �� D �handle � � � � � � � � � � � 10i 0 value � � � � � � � � � � � � D data � � � � � �s � � � � �65535a � � � � � � � � � � � � � � � � D bytesRead � � � s � � � � � � 10i 0 � � � � � � � � � � � � � � � D handle � � � � �s � � � � � � 10i 0 � � � � � � � � � � � � � � � D rc � � � � � � �s � � � � � � 10i 0 � � � � � � � � � � � � � � � D O_RDONLY � � � �c � � � � � � � � � 1 � � � � � � � � � � � � � � D O_TEXTDATA � � �c � � � � � � � � � 16777216 � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �handle = open(%trim(pFile): O_RDONLY+O_TEXTDATA); � � � � � � �� � �if handle < 0; � � � � � � � � � � � � � � � � � � � � � � � � � � � �// something is wrong � � � � � � � � � � � � � � � � � � � �� � � � return ''; � � � � � � � � � � � � � � � � � � � � � � � � �� � �endif; � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �bytesRead = read(handle: %addr(data): %size(data)); � � � � �� � � �if bytesRead <= 0; � � � � � � � � � � � � � � � � � � � � � � � � �return ''; � � � � � � � � � � � � � � � � � � � � � � � � � � � � �endIf; � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �rc = close(handle); � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � �return %trim(data); � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � �� P � � � � � � � � e � � � � � � � � � � ��
-----------------------------------------------------------------------
This is the FTPAPI mailing list. To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------