AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Multipart/form-data im Datasnap REST Server Apache Link Module

Multipart/form-data im Datasnap REST Server Apache Link Module

Ein Thema von NickD · begonnen am 22. Apr 2020 · letzter Beitrag vom 22. Apr 2020
Antwort Antwort
NickD

Registriert seit: 10. Okt 2012
Ort: Burgsinn
53 Beiträge
 
Delphi 10.3 Rio
 
#1

Multipart/form-data im Datasnap REST Server Apache Link Module

  Alt 22. Apr 2020, 07:47
Hallo zusammen,
ich versuche gerade eine Möglichkeit zu finden, mit der ich eine Datei an den Datasnap REST Server senden kann.
Bisher verwende ich Base64 Strings im JSON Body. Allerdings ist hier der Overhead recht groß.
Ich würde die Dateien gerne einfach per Multipart/form-data übertragen, weiß aber absolut nicht wie ich diese im Datasnap verarbeiten kann.
Konnte hierzu auch im Netz bisher keine Beispiele finden.

Ich binde den Datasnao REST als Apache Module ein.
Folgende Komponenten stehen mir im TWebModule zur Verfügung:
- TDSServer
- TDSServerClass
- TDSHTTPWebDispatcher
- TDSAuthenticationManager
- und natürlich das TwebModul selbst

Ich weiß leider nicht wo ich ansetzen muss um die Dateien "entgegen zu nehmen" und dann lokal zu speichern.
Ich hoffe ihr habt hier einen Ansatz für mich.

Danke.

Grüße Nick.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.105 Beiträge
 
Delphi 12 Athens
 
#2

AW: Multipart/form-data im Datasnap REST Server Apache Link Module

  Alt 22. Apr 2020, 09:28
Du kannst direkt einen TStream als Parameter oder Result einer DataSnap-Methode verwenden.

Aber Achtung, ab etwa 32 KB (über einer Blockgröße im Übertragungsweg) wird der Stream nicht sofort/direkt übertragen und weil da am Ziel eine spezielle TStream-Instanz ankommt, wo Size = -1 ist, kommen z.B. viele LoadFromStream-Funktionen nicht damit klar, welche vorm/beim Lesen auf die Size gucken.

Wir/Ich hatte daher das generierte DataSnap-Zeug nochmal bissl erweitert und kopiere beim Empfang (Server und Client) nochmal in einen eigenen TMemoryStream um.
Grund:
* entwededer ist Size >= 0, dann kann diese Instanz wie ein normaler TMemoryStream verwendet werden
* und bei Size < 0 muß man so lange Stream.Read machen, bis dort Result=0 sagt, dann ist man am Ende
** während dem Lesen wird dann vom DataSnap auch der Rest der Daten übertragen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Apr 2020 um 09:35 Uhr)
  Mit Zitat antworten Zitat
NickD

Registriert seit: 10. Okt 2012
Ort: Burgsinn
53 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Multipart/form-data im Datasnap REST Server Apache Link Module

  Alt 22. Apr 2020, 10:04
Danke für die Info.
Ich frage mich nur wie ich das ganze dann Aufrufe.
Sagen wir mal ich habe die REST Funktion:

Code:
function UploadFile(AStream: TStream): Integer;
Der Aufruf soll aus einer nativen Android App(Java) ausgeführt werden.
Rufe ich das dann auch als Multipart/form-data auf oder muss ein Stream direkt an die Funktion im Body übergeben werden?

Um eine Post-Funktion auszuführen muss vor die REST-Funktion ja noch das Präfix "upload" gesetzt werden. Ich meine mal gelesen zu haben, dass dort immer ein JSON-Object verlangt wird sobald dieses Präfix gesetzt ist.

Gibt es sonst noch eine Möglichkeit den Multipart zu verarbeiten?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Multipart/form-data im Datasnap REST Server Apache Link Module

  Alt 22. Apr 2020, 10:10
Oder man nimmt die Funktionen von RESt ( HTTP[s] PUT usw.)
Markus Kinzler
  Mit Zitat antworten Zitat
NickD

Registriert seit: 10. Okt 2012
Ort: Burgsinn
53 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Multipart/form-data im Datasnap REST Server Apache Link Module

  Alt 22. Apr 2020, 10:37
Ich habe jetzt noch etwas entdeckt, was mir eventuell helfen könnte.
Das TWebModule kann verschiedene TWebActionItems verwenden um auf GET, POST, PUT, etc. zu reagieren.
Werde das damit mal testen.

Im Anhang noch ein Screenshot vom Objektinspektor.
Miniaturansicht angehängter Grafiken
objektinspektor.jpg  
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:31 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