[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Base64 decode of a PNG file
Radu,
As far as I can see, 'OutputData' is a "varying" field:
D OutputData s 32767A varying
Hence you need to add *DATA to the %addr() function:
callp write(fd: %addr(OutputData: *DATA): %len(OutputData));
Thomas.
Am 23.02.2015 um 17:10 schrieb Radu Botescu:
> 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
> -----------------------------------------------------------------------
>
-----------------------------------------------------------------------
This is the FTPAPI mailing list. To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------