Hallo Uwe.
Meine aktuelle Bastel-Funktion:
Delphi-Quellcode:
constructor TccRestAPI.Create(ABaseUrl:string='');
begin
FbIsUserLoggedIn := FALSE;
SetBaseUrl ( ABaseUrl );
FToken := '';
FRESTClient := TRESTClient.Create(FBaseUrl);
FRESTRequest := TRESTRequest.Create(nil);
FRESTResponse := TRESTResponse.Create(nil);
FFDMemTable := TFDMemTable.Create(nil);
FDataSource := TDataSource.Create(Nil);
FRESTResponseDataSetAdapter := TRESTResponseDataSetAdapter.Create(nil);
FLOAuth2 := NIL;
FRESTRequest.Client := FRESTClient;
FRESTRequest.Response := FRESTResponse;
FRESTResponseDataSetAdapter.Dataset := FFDMemTable;
FRESTResponseDataSetAdapter.Response := FRESTResponse;
FDataSource.DataSet := FFDMemTable;
end;
function TccRestAPI.UploadFile(AFunction, ASourceFileName: string): boolean;
var
fileStream : TFileStream;
js : TJsonObject;
sSaveContentType : string;
sSaveAccept : string;
begin
Result := FALSE;
DoNotifyExecute (AFunction); // fürs logging
sSaveContentType := FRESTClient.ContentType; // merken ... später zurücksetzen
sSaveAccept := FRESTRequest.Accept; // merken ... später zurücksetzen
Request.Params.Clear;
Request.Body.ClearBody;
// FRESTClient.ContentType:= 'application/x-www-form-urlencoded';
FRESTClient.ContentType:= 'multipart/form-data';
FRESTRequest.Accept:= '*/*';
fileStream := TFileStream.Create(ASourceFileName,fmOpenRead);
FRESTRequest.AddParameter('additionalMetadata', 'file', TRESTRequestParameterKind.pkREQUESTBODY);
FRESTRequest.Params.AddItem('file', fileStream, TRESTRequestParameterKind.pkREQUESTBODY,
[TRESTRequestParameterOption.poDoNotEncode],
TRESTContentType.ctAPPLICATION_OCTET_STREAM);
// fileStream := TFileStream.Create(ASourceFileName, fmOpenRead or fmShareDenyNone);
// Request.AddBody(fileStream,ctAPPLICATION_OCTET_STREAM);
// Request.AddFile('file',ASourceFileName); // kommt nicht an ...
if self.Execute(AFunction,js,TRESTRequestMethod.rmPost) then
begin
js.DisposeOf;
Result := TRUE;
end;
FRESTClient.ContentType:= sSaveContentType; // zurücksetzen
FRESTRequest.Accept:= sSaveAccept; // zurücksetzen
fileStream.Free;
end;
Wie gesagt, ich habe schon eine Menge probiert, und mittlerweile irgendwie aufgegeben (ist ein "NiceToHave"). Deswegen steht in diesem Snippet nicht alles drin...
Was ich nicht verstehe, ist im JavaScript der verwendete Code:
Code:
let formData = new FormData();
formData.append("file", file[0], filename);
Ich finde kein Equivalent dafür im Delphi.