Results 1 to 7 of 7

Thread: Base64 encoded pdf - soap met httprio

  1. #1
    Senior Member Delphiwizard's Avatar
    Join Date
    Dec 2006
    Location
    België
    Posts
    160

    Base64 encoded pdf - soap met httprio

    Hoi,

    Ik probeer een base64 encoded pdf die ik als TByteDynArray terugkrijg te decoderen en op te slaan in een blob in de database, maar ondanks vele pogingen en opzoekingen slaag ik er niet om een de pdf werkend te hebben.
    Heeft iemand een idee wat ik fout doe? Ik heb nog niet zoveel ervaring met webservices.

    De andere zaken uit het soap resultaat kan ik wel prima bewaren.

    StatusResponse.vehicleHistoryReport.file_ is een TByteDynArray en moet dus gedecodeerd worden naar een TMemoryStream of TBlobStream zodat ik deze kan inlezen in de blob van de query.

    Code:
       Var ResultStream: TMemoryStream;
           StringStream: TStringStream;
        ………
    
    
          qry_log.Append;
          qry_log.FieldByName('CP_STAMP').AsDateTime := Now;
          …..
          if Assigned(StatusResponse.vehicleHistoryReport) then
          begin
             qry_log.FieldByName('CP_REPORTFILE').AsString := StatusResponse.vehicleHistoryReport.fileName;
             qry_log.FieldByName('CP_REPORT_URL').AsString := StatusResponse.vehicleHistoryReport.publicUrl;
             try
                StringStream := TStringStream.Create;
                StringStream.Position := 0;
                ResultStream := TMemoryStream.Create;
                ResultStream.Position := 0;
                StringStream.Write(StatusResponse.vehicleHistoryReport.file_,
                   Length(StatusResponse.vehicleHistoryReport.file_));
                TidDecoderMime.DecodeStream(StringStream.ReadString(StringStream.Size), ResultStream);
                ResultStream.Position := 0;
                TBlobField(qry_log.FieldByName('CP_REPORT')).LoadFromStream(ResultStream);
             finally
                ResultStream.Free;
                StringStream.Free;
             end;
          end;
          qry_log.Post;
    Ziet iemand wat ik fout doe?

  2. #2
    ik denk dat je je stringsttream op positie 0 moet zetten voor de decodestream. Dus na het inlezen en voor het decoderen.

  3. #3
    Senior Member Delphiwizard's Avatar
    Join Date
    Dec 2006
    Location
    België
    Posts
    160
    Bedankt Benno, het lukt echter nog steeds niet daarmee, ik heb de decoded stream met SaveToFile bewaard naar een bestand en dat lijkt me nog steeds gecodeerd te zijn.
    Ik mis ergens iets denk ik.

  4. #4
    moet die decodestream wel een stream hebben als parameter?

    Ik kom op internet voorbeelden tegen waar ze er een string in doen: http://www.devsuperpage.com/search/A...=2&ArtID=75595 2e post.

  5. #5
    Senior Member Delphiwizard's Avatar
    Join Date
    Dec 2006
    Location
    België
    Posts
    160
    Ja die DecodeStream werkt met 2 streams als parameters.
    Ik heb het nu net geprobeerd met DecodeMime van jcl, deze gebruikt rechtstreeks TByteDynArray als parameters maar daar zit ik ook vast.

    Als iemand een voorbeeld code stukje code zou hebben zou dat enorm helpen.

  6. #6
    Senior Member Delphiwizard's Avatar
    Join Date
    Dec 2006
    Location
    België
    Posts
    160
    Het probleem is net opgelost...er was mij gezegd dat de pdf in de soap base64 encoded was maar dat blijkt niet zo te zijn, ik moet het dus helemaal niet decoderen.

    De TByteDynArray omzetten naar een stream was voldoende.

  7. #7
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Dat zelfde probleem heb ik ook gehad. In de zelfde service is 1 lijst gecodeerd en de andere niet. Sta je wel raar te kijken als et ineens de andere richting op gaat. Maar mocht je toch nog moeten omzetten:
    Delphi Code:
    1. procedure TBericht3c.DecodeFile(const base64: TByteDynArray; const FileName: string);
    2. var stream: TBytesStream;
    3. begin
    4.   stream := TBytesStream.Create(TNetEncoding.Base64.Decode(base64));
    5.   try
    6.     stream.SaveToFile(Filename);
    7.     flog.Log ('bestand opgeslagen : ' + Filename);
    8.   finally
    9.     stream.Free;
    10.   end;
    11. end;
    Delphi is great. Lazarus is more powerfull

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •