I am using it- only I am not apparently using it RIGHT :S My b64decode function is using BASE64's stream class to operate with -it's purpose isn't to do the decoding (BASE64 is meant to do that), but rather the conversion process from string to stream -into base64 - back into string. Since the only outputs I can get from postgresql are strings - I need to send a string into the base64decoder class and turn the data I read back into a string again (the latter phase I could possibly skip though - let me check).
A.J. On 5/16/07, ik <[EMAIL PROTECTED]> wrote:
Hi, Why not to use the FPC's unit of BASE64 ? it works on streams. Or am I missing something ? Ido On 5/16/07, A.J. Venter <[EMAIL PROTECTED]> wrote: > So - second attempt at implementing it... same sad result - only now > the XPM fails as well... > > This is my now somewhat improved code... am I missing something > extremely obvious here ? > Function DecodeB64(S : String) : String; > Procedure doNothing; > Begin > end; > var > b64decoder: TBase64DecodingStream; > S1 : TSTringStream; > S2 : TStringStream; > begin > S1 := TStringStream.Create(S); > S2 := TStringStream.Create(''); > b64decoder := TBase64DecodingStream.Create(S1); > With B64Decoder Do > Begin > try > S2.CopyFrom(B64Decoder,B64Decoder.Size); > Except > DoNothing; > end; > end; > > Result := S2.DataString; > S1.Free; > S2.Free; > b64decoder.Free; > end; > > I'm stumped as to what it is I am doing wrong... > Any ideas ? > > A.J. > On 5/16/07, A.J. Venter <[EMAIL PROTECTED]> wrote: > > A small update - > > Don't ask me WHY - but get this - I take the exact same unchanged > > code, and insert an XPM image. > > It works perfectly. > > I try a jpg or a png - and it fails. > > > > All I can imagine is that my b64decode function is broken - and that > > the breakage is ONLY affecting true binary sources, XPM (like my test > > program) is actually an ASCII format - so it survives the process > > intact - while png etc. fails. > > > > So - I guess I start hacking my b64decode function. > > > > A.J. > > > > On 5/16/07, A.J. Venter <[EMAIL PROTECTED]> wrote: > > > Hi again all > > > Based on everyone's advice, I chose to go with base64 encoding - and > > > started coding. > > > > > > Right now I am quite successfully: > > > 1) Reading the image > > > 2) Encoding it to base64 (using the encodeb64 function from the examples) > > > 3) Storing the result in the database (I THINK it's storing right) > > > > > > Later I then select it, run it through decodeb64 (my own function > > > based on the above, code below) and then save this string to a file - > > > a file that has the right extension (the reason for this is actually > > > good - remote DB access, and I want to cache the images and only > > > download if they changed) > > > Finally - a simple TImage.Picture.LoadFromFile is meant to handle the > > > last bit... only it doesn't - somewhere along the way my data is > > > corrupted - the files being dumped differ from the orriginals - yet > > > oddly they are the exact same size. > > > I know we're not supposed to include attachments on the list, so for > > > now I didn't but if I may, I would like to add (assuming anybody says > > > it would be usefull: > > > 1) An orriginal image > > > 2) A post database process filedump of the same image > > > 3) The (apparently) base64 encoded database entry for said image > > > > > > I can say that I tested my b64encode/b64decode functions with a simple > > > program that lets me enter string, encodes it, writes that, decodes > > > THAT and writes it back (which should match the orriginal input) - > > > that at least seems to work fine. > > > > > > Any idea where the corruption is coming from ? All help, as always, > > > greatly appreciated. > > > > > > Relevant code snippets: > > > Function DecodeB64(S : String) : String; > > > Procedure doNothing; > > > Begin > > > end; > > > var > > > b64decoder: TBase64DecodingStream; > > > S1 : TSTringStream; > > > S2 : String; > > > InputStream: TStream; > > > IsEnd: Boolean; > > > > > > begin > > > S1 := TStringStream.Create(S); > > > S2 := ''; > > > b64decoder := TBase64DecodingStream.Create(S1); > > > While not B64Decoder.EOF do > > > Begin > > > try > > > S2 := S2+(CHR(B64Decoder.ReadByte)); > > > except > > > doNothing; > > > end; > > > end; > > > > > > Result := S2; > > > b64decoder.Free; > > > end; > > > > > > Image Saving: > > > Procedure SaveBTNClick(Sender:TObject); //Snipped > > > Var B64 : String; > > > S :TStringList; > > > Begin > > > S := TStringList.Create; > > > S.LoadFromFile(ImgFileName); > > > B64 := EncodeB64(S.Text); > > > Ad.SaveData(add_desc.text,b64); > > > end; > > > > > > > > > Procedure TZC_Advertising.SaveData(Description,Data:String); > > > Var Q : String; > > > Begin > > > Q := 'UPDATE advertising SET data='+QS(Data)+' > > > timestamp='+QS('NOW')+' WHERE description = '+QS(Description)+' ;'; > > > FResult := ZC_DBQuery(Q); > > > //Notes: FResult is a PPGResult, ZC_DBQuery is a very well tested > > > wrapper function > > > //QS = QuoteString - it wraps the input in '' > > > end; > > > > > > Image Loading: > > > Function TZC_Advertising.GetData(Description:String):String; > > > Var > > > S : String; > > > Begin > > > FResult := ZC_DBQuery('SELECT data FROM advertising WHERE description > > > = '+QS(Description)+';'); > > > If PqNTuples(Fresult) >= 0 then > > > begin > > > S := PQGetValue(FResult,0,0); > > > GetData:=DecodeB64(S); > > > end else > > > GetData := ''; > > > end; > > > > > > //In the app: > > > IName := GetTempDir+Ad.GetTimeStamp(add_desc.text)+Ad.GetExt(add_desc.text); > > > Data := TStringList.Create; > > > Data.Add(Ad.GetData(add_desc.text)); > > > Data.SaveToFile(Iname); > > > ad_Img.Picture.LoadFromFile(Iname); > > > Data.Free; > > > > > > -- > > > A.J. Venter > > > CEO - OutKast Solutions C.C. > > > http://www.outkastsolutions.co.za > > > Cell: +27 83 455 9978 > > > Fax: +27 21 413 2800 > > > Office: +27 21 591 6766 > > > > > > > > > -- > > A.J. Venter > > CEO - OutKast Solutions C.C. > > http://www.outkastsolutions.co.za > > Cell: +27 83 455 9978 > > Fax: +27 21 413 2800 > > Office: +27 21 591 6766 > > > > > -- > A.J. Venter > CEO - OutKast Solutions C.C. > http://www.outkastsolutions.co.za > Cell: +27 83 455 9978 > Fax: +27 21 413 2800 > Office: +27 21 591 6766 > > _________________________________________________________________ > To unsubscribe: mail [EMAIL PROTECTED] with > "unsubscribe" as the Subject > archives at http://www.lazarus.freepascal.org/mailarchives > -- http://ik.homelinux.org/ _________________________________________________________________ To unsubscribe: mail [EMAIL PROTECTED] with "unsubscribe" as the Subject archives at http://www.lazarus.freepascal.org/mailarchives
-- A.J. Venter CEO - OutKast Solutions C.C. http://www.outkastsolutions.co.za Cell: +27 83 455 9978 Fax: +27 21 413 2800 Office: +27 21 591 6766 _________________________________________________________________ To unsubscribe: mail [EMAIL PROTECTED] with "unsubscribe" as the Subject archives at http://www.lazarus.freepascal.org/mailarchives