Datei einlesen und als Base64-String übertragen
Ich muss über SOAP eine Datei übertragen. Sie wird in einen Widestring geschrieben und das Format soll Base64 sein.
Ich habe es so versucht: die funktion LoadFile von hier:
Delphi-Quellcode:
dann noch Base64Encode aus der unit von
function LoadFile(const FileName: TFileName): string;
begin with TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite) do begin try SetLength(Result, Size); Read(Pointer(Result)^, Size); except Result := ''; // Deallocates memory Free; raise; end; Free; end; end; hier Dann habe ich es so versucht: SOAP.File_:=Base64Encode(LoadFile('d:\temp.pdf')); Nur das SOAP-Portal sagt mir immer, dass die Datei fehlerhaft wäre. Der Rest der Abfrage mit SOAP funktioniert soweit korrekt, daher denke ich, dass es ein Fehler beim Erstellen des Strings ist. Ich denke daher, dass ich einen Fehler in dieser Routine habe, nur sehe ich den Fehler einfach nicht. Vielleicht hat jemand eine Idee, was ich falsch mache Danke Chaosworld |
Re: Datei einlesen und als Base64-String übertragen
Also die Funktion LoadFile() ist ja leicht daneben, denn das Ergebnis von Read() wird ja gar nicht geprüft.
Wirf die Funktion weg und nimm diese:
Delphi-Quellcode:
function FileToString(const FileName: string): AnsiString;
var fs: TFileStream; Len: Integer; begin fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); try Len := fs.Size; SetLength(Result, Len); if Len > 0 then fs.ReadBuffer(Result[1], Len); finally fs.Free; end; end; |
Re: Datei einlesen und als Base64-String übertragen
super danke, ich könnte dich küssen, das war es, nach stundenlangem Ausprobieren klappt endlich die komplette SOAP-Übertragung, kann ich das nun endlich abschlissen.
Erst einmal 3 Kreuze im Kalender machen Chaosworld |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz