AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi REST-API: Upload einer zweier Dateien klappt nicht
Thema durchsuchen
Ansicht
Themen-Optionen

REST-API: Upload einer zweier Dateien klappt nicht

Ein Thema von Blo · begonnen am 8. Apr 2020 · letzter Beitrag vom 8. Apr 2020
Antwort Antwort
Benutzerbild von Blo
Blo

Registriert seit: 20. Feb 2005
Ort: Kaarst
90 Beiträge
 
Delphi 11 Alexandria
 
#1

REST-API: Upload einer zweier Dateien klappt nicht

  Alt 8. Apr 2020, 17:09
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.
Ulrich Blomeyer
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 8. Apr 2020, 17:22
Es könnte vielleicht helfen, dem AddFile als dritten Parameter ein TRESTContentType.ctAPPLICATION_X_WWW_FORM_URLENCOD ED mitzugeben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Blo
Blo

Registriert seit: 20. Feb 2005
Ort: Kaarst
90 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 8. Apr 2020, 17:51
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);
Ulrich Blomeyer

Geändert von Blo ( 8. Apr 2020 um 18:06 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#4

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

  Alt 8. Apr 2020, 18:08
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.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#5

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

  Alt 8. Apr 2020, 18:18
Schluß mit Raten, bitte mit Telrik Fiddler den Post-Request von dir und von Postman vergleichen.
https://www.youtube.com/watch?v=gujBKFGwjd4
  Mit Zitat antworten Zitat
Benutzerbild von Blo
Blo

Registriert seit: 20. Feb 2005
Ort: Kaarst
90 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 8. Apr 2020, 18:33
... Klappst dann, liegt das Problem in der Schreibweise der Dateinamen / Pfadangaben...
Hatte ich schon ausprobiert - daran liegt es nicht.
Ulrich Blomeyer
  Mit Zitat antworten Zitat
Benutzerbild von Blo
Blo

Registriert seit: 20. Feb 2005
Ort: Kaarst
90 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 8. Apr 2020, 19:40
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!
Ulrich Blomeyer

Geändert von Blo ( 8. Apr 2020 um 19:44 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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