Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi REST-API: Upload einer zweier Dateien klappt nicht (https://www.delphipraxis.net/203939-rest-api-upload-einer-zweier-dateien-klappt-nicht.html)

Blo 8. Apr 2020 17:09

REST-API: Upload einer zweier Dateien klappt nicht
 
Ich sammle gerade Erfahrungen beim Benutzen einer Rest-API

Delphi 10.3.3 VCL-Anwendung mit TRestClient, TRestRequest und TRestResponse Komponenten

Einige einfache Get-Request klappen auch wie gewünscht.

Was im Moment nicht klappt ist ein Post-Request bei dem u.a. zwei Dateien hochgeladen werden sollen (eine Pdf und eine Json-Datei).
Beim Testen mit „Postman“ klappt der Reguest. Meine Delphilösung ergibt einen Serverfehler (HTTP/1.1 500). Der Admin beim API-Anbieter teilte mir mit, dass die beiden Dateien nicht angekommen sind.

Meine Delphi-Lösung sieht zurzeit so aus:

Code:
RESTClient.ContentType:= 'application/x-www-form-urlencoded';
RESTClient.BaseURL:= 'https://xxxx';
RESTRequest.Accept:= '*/*';
RESTRequest.Method:= rmPOST;
RESTRequest.Body.ClearBody;
RESTRequest.Resource:= '';
RESTRequest.ResourceSuffix:= xxxx';
RESTRequest.AddFile('file', /C:/Temp/Test_31_08_2001.pdf');
RESTRequest.AddFile('file', /C:/Temp/Test_31_08_2001.json');
RESTRequest.Execute;
Der Postman-Request als C#-Code:

Code:
var client = new RestClient("https://xxxx");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddFile("file", "/C:/Temp/Test_31_08_2001.pdf ");
request.AddFile("file", "/C:/Temp/Test_31_08_2001.json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Ich vermute, dass in der Delphi-Lösung „RESTRequest.AddFile“ allein keinen Upload bewirkt.
Die Emba-Hilfe zu "AddFile" sagt nur aus "Fügt der Anforderung Dateiinhalt hinzu" und dass die Methode überladen ist.

Uwe Raabe 8. Apr 2020 17:22

AW: REST-API: Upload einer zweier Dateien klappt nicht
 
Es könnte vielleicht helfen, dem AddFile als dritten Parameter ein TRESTContentType.ctAPPLICATION_X_WWW_FORM_URLENCOD ED mitzugeben.

Blo 8. Apr 2020 17:51

AW: REST-API: Upload einer zweier Dateien klappt nicht
 
Hallo Herr Raabe,

hilft leider nicht.

Code:
RESTRequest.AddFile('file','/C:/Temp/Test_31_08_2001.pdf',TRESTContentType.ctAPPLICATION_X_WWW_FORM_URLENCODED);
RESTRequest.AddFile('file','/C:/Temp/Test_31_08_2001.json',TRESTContentType.ctAPPLICATION_X_WWW_FORM_URLENCODED);

Delphi.Narium 8. Apr 2020 18:08

AW: REST-API: Upload einer zweier Dateien klappt nicht
 
Kenne mich mit dem Thema nicht aus, aber ist die Schreibweise der Dateinamen so (unter Windows?) korrekt?

Mein Versuch wäre so:
Delphi-Quellcode:
RESTRequest.AddFile('file','Test_31_08_2001.pdf',TRESTContentType.ctAPPLICATION_X_WWW_FORM_URLENCODED);
RESTRequest.AddFile('file','Test_31_08_2001.json',TRESTContentType.ctAPPLICATION_X_WWW_FORM_URLENCODED);
und die Dateien (erstmal) ins Verzeichnis der Exe legen.

Klappst dann, liegt das Problem in der Schreibweise der Dateinamen / Pfadangaben.

Aber: Das ist jetzt nur mal so geraten.

TiGü 8. Apr 2020 18:18

AW: REST-API: Upload einer zweier Dateien klappt nicht
 
Schluß mit Raten, bitte mit Telrik Fiddler den Post-Request von dir und von Postman vergleichen.
https://www.youtube.com/watch?v=gujBKFGwjd4

Blo 8. Apr 2020 18:33

AW: REST-API: Upload einer zweier Dateien klappt nicht
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1461646)
... Klappst dann, liegt das Problem in der Schreibweise der Dateinamen / Pfadangaben...

Hatte ich schon ausprobiert - daran liegt es nicht.

Blo 8. Apr 2020 19:40

AW: REST-API: Upload einer zweier Dateien klappt nicht
 
Zitat:

Zitat von TiGü (Beitrag 1461649)
Schluß mit Raten, bitte mit Telrik Fiddler den Post-Request von dir und von Postman vergleichen.
https://www.youtube.com/watch?v=gujBKFGwjd4

Habe ich gemacht und bin auch schon ein Stück weitergekommen:
Code:
RESTRequest.AddFile('file','Test_31_08_2001.pdf',TRESTContentType.ctAPPLICATION_PDF);
RESTRequest.AddFile('file','Test_31_08_2001.json',TRESTContentType.ctAPPLICATION_JSON);
Wenn der erste Parameter bei beiden AddFile-Aufrufen gleich ist ("file") wird nur die zweite Datei an den Server übertragen. Und da der Server zwei Dateien erwartet meckert er.

Werden die ersten Parameter unterschiedlich benannt ("file1", "file2") werden beide Dateien übertragen (kann man dank "Fiddler" gut verfolgen). Da der Server aber beides mal (vermutlich) die Kennung "file" erwartet, beschwert er sich trotzdem.

Ich frage morgen einmal beim API-Anbieter nach.

Vielen Dank bis hier schon mal!


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz