Hoika, bist offiziell mein Held des Tages.
Die anderen Antworten gingen leider bissel am eigentlichen Problem vorbei.
Die Variable ms hatte ich ursprünglich auch tatsächlich als TmemoryStream deklariert. Nur AddBody hat mit kein TMemoryStream geschluckt. Mir war nicht klar das man TMemoryStream.create auch auf ein Tstream anwenden kann.
Für die die es Interessiert, hab es jetzt so gelöst:
Delphi-Quellcode:
procedure upload(File : olevariant)
var
ms: TStream;
p: Pointer;
begin
...
ms := tMemoryStream.create;
try
ms.position:=0;
p := varArrayLock(File);
ms.Writebuffer(p^,VarArrayHighBound(File,1));
VarArrayUnlock(File);
RESTRequest.addbody(ms,ContentType);
RESTRequest.execute;
finally
ms.free;
end;
end;
Der Vollständigkeit halber noch der Rückweg, der war ja im Beispiel auch mit einem Filestream gelöst!
Delphi-Quellcode:
function download(PfadZumFile:string):olevariant;
var
lms : tstream;
buffer : pointer;
begin
...
restclient.baseurl:=PfadZumFile;
restrequest.execute;
...
lms:=Tmemorystream.create;
try
lms.writeData(RestResponse.RawBytes,length(restresponse.rawbytes));
lms.position:=0;
result:= VarArrayCreate({0, lms.size -1}, varByte);
buffer:= VarArrayLock(Result);
lms.ReadBuffer(Buffer^,lms.size);
VarArrayUnloack(Result);
finally
lms.free;
end;
end;
Funktioniert super! keine Datei auf der Platte und gefühlt ein wenig schneller
Vielen Dank mal wieder für die schnelle und gute Hilfe.
Gruß
PJM