AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi RAD Server - Download einer Datei über die RAD Server komponenten
Thema durchsuchen
Ansicht
Themen-Optionen

RAD Server - Download einer Datei über die RAD Server komponenten

Ein Thema von fisipjm · begonnen am 23. Nov 2021 · letzter Beitrag vom 25. Nov 2021
Antwort Antwort
Seite 1 von 2  1 2      
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#1

RAD Server - Download einer Datei über die RAD Server komponenten

  Alt 23. Nov 2021, 16:46
Delphi-Version: 10.4 Sydney
Moin Moin - oder guten Abend

Ich stehe vor folgendem Problem und komme nicht so recht weiter. Ich Arbeite aktuell an einem recht großen Projekt, dass ich mit dem RAD Server zu großen Teilen schon umgesetzt habe.
Abfrage und Schreibenauf Datenbank usw, läuft schon super. Jetzt möchte ich einen Dateiaustausch umsetzen.
Also Konkret möchte ich das ich eine URL mit ID in das Backen werfe und mir mein Client dann ein Fenster bringt wo ich aussuchen kann an welchen Platz ich die Datei speichern möchte.
Über die Indy Komponenten hätte ich das schon 10 mal gelöst, leider muss ich aber den weg über die RADServer komponenten gehen. In dem fall den TbackendEndpoint weil ich die Authentifizierung benötige die da inkludiert ist.

Meine Frage, wie komm ich von der Komponente an die Datei ran? Ich finde keine Dokumentation oder Beispiele dazu alles was mit Dateien zusammenhängt ist immer über ein eigens HTML gelöst und zeigt dann Bilder an, aber ein Download einer Datei kann ich nirgends finden.

Grüße
PJM

Geändert von fisipjm (23. Nov 2021 um 16:51 Uhr)
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#2

AW: RAD Server - Download einer Datei über die RAD Server komponenten

  Alt 23. Nov 2021, 17:07
Kaum mach ichs Ma... zu
Hier die Antwort für alle interessierten


Delphi-Quellcode:
  EndpointRead.Execute;
  var lstrstream: TStringStream := TStringStream.Create(EndpointRead.Response.content, TEncoding.UTF8);
  if SaveDialog1.Execute then
  lstrstream.SaveToFile(SaveDialog1.FileName);
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: RAD Server - Download einer Datei über die RAD Server komponenten

  Alt 23. Nov 2021, 17:35
Das ": TStringStream" kannst'e weglassen, wenn du magst. (Typinferenz)

Und du gibt lstrstream natürlich auch wieder frei?


Ist Response.content zufällig ein String?
oder Byte-Array (WriteAllBytes), oder String-Array (WriteAllLines), oder ...
Delphi-Quellcode:
EndpointRead.Execute;
if SaveDialog1.Execute then
  TFile.WriteAllText(SaveDialog1.FileName, EndpointRead.Response.content, TEncoding.UTF8);
$2B or not $2B

Geändert von himitsu (23. Nov 2021 um 17:39 Uhr)
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#4

AW: RAD Server - Download einer Datei über die RAD Server komponenten

  Alt 25. Nov 2021, 09:02
Zitat von himitsu;14980
Ist Response.content zufällig ein String?
oder Byte-Array (WriteAllBytes), oder String-Array (WriteAllLines), oder ...
[DELPHI
:
EndpointRead.Execute;
if SaveDialog1.Execute then
TFile.WriteAllText(SaveDialog1.FileName, EndpointRead.Response.content, TEncoding.UTF8);[/DELPHI]
Ähm ja, Response.Content ist ein String wieso?
Funktioniert das dann auch mit Dateien die keine testdateien sind? Muss ich mal testen
  Mit Zitat antworten Zitat
TiGü

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

AW: RAD Server - Download einer Datei über die RAD Server komponenten

  Alt 25. Nov 2021, 09:39
Ist Response.content zufällig ein String?
oder Byte-Array (WriteAllBytes), oder String-Array (WriteAllLines), oder ...
Delphi-Quellcode:
EndpointRead.Execute;
if SaveDialog1.Execute then
  TFile.WriteAllText(SaveDialog1.FileName, EndpointRead.Response.content, TEncoding.UTF8);
Ähm ja, Response.Content ist ein String wieso?
Funktioniert das dann auch mit Dateien die keine testdateien sind? Muss ich mal testen
Himi will darauf hinaus, dass du per EndpointRead.Response auf die Content-Property: string von der Response: TCustomRESTResponse-Klasse gehst.
Wenn du dir in der Unit REST.Client mal anschaust, wie das implementiert ist, wirst du auch sehen, dass es eine property namens RawBytes: TBytes gibt.
Je nach Inhalt deines Responses kann es vorteilhaft sein, gleich die Binärdaten zu nehmen/verarbeiten/abzuspeichern.

Geändert von TiGü (25. Nov 2021 um 10:01 Uhr)
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#6

AW: RAD Server - Download einer Datei über die RAD Server komponenten

  Alt 25. Nov 2021, 10:02
[QUOTE=TiGü;1498145][QUOTE=fisipjm;1498141][QUOTE=himitsu;14980
Wenn du dir in der Unit REST.Client mal anschaust, wie das implementiert ist, wirst du auch sehen, dass es eine property namens RawBytes: TBytes gibt.
Je nach Inhalt deines Responses kann es vorteilhaft sein, gleich die Binärdaten zu nehmen/verarbeiten/abzuspeichern.[/QUOTE]

Hab mir fast gedacht das es da noch was besseres als Content gibt. Habs aber irgendwie nicht gefunden

Das Heist das würde ich dann so machen?
Delphi-Quellcode:
.....
Stream := TFileStream.Create(SaveDialog1.FileName, fmCreate);
  try
    if Response.Body.rawbyte <> nil then
      Stream.WriteBuffer(Response.Body.rawbyte[0], Length(Response.Body.rawbyte));
  finally
    Stream.Free;
  end;
.....
Danke für die gute Hilfe

Geändert von fisipjm (25. Nov 2021 um 10:03 Uhr) Grund: Fehler im Code
  Mit Zitat antworten Zitat
TiGü

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

AW: RAD Server - Download einer Datei über die RAD Server komponenten

  Alt 25. Nov 2021, 10:41
Delphi-Quellcode:
    if Response.ContentLength > 0 then // oder Response.HasResponseContent wenn Response ein Interface vom Typ IRESTResponseJSON sein sollte/gecastet worden ist!
    begin
      try
        System.IOUtils.TFile.WriteAllBytes(SaveDialog1.FileName, Response.RawBytes);
      except
        // reagieren auf die möglichen Exceptions überbleibt dem geneigten Leser als Hausaufgabe!
        on E: ENotSupportedException do
        begin

        end;
        on E: EArgumentException do
        begin

        end;
        on E: EDirectoryNotFoundException do
        begin

        end;
        on E: EFileNotFoundException do
        begin

        end;
      end;
    end;
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#8

AW: RAD Server - Download einer Datei über die RAD Server komponenten

  Alt 25. Nov 2021, 11:10
Delphi-Quellcode:
    if Response.ContentLength > 0 then // oder Response.HasResponseContent wenn Response ein Interface vom Typ IRESTResponseJSON sein sollte/gecastet worden ist!
    begin
      try
        System.IOUtils.TFile.WriteAllBytes(SaveDialog1.FileName, Response.RawBytes);
      except
        // reagieren auf die möglichen Exceptions überbleibt dem geneigten Leser als Hausaufgabe!
        on E: ENotSupportedException do
        begin

        end;
        on E: EArgumentException do
        begin

        end;
        on E: EDirectoryNotFoundException do
        begin

        end;
        on E: EFileNotFoundException do
        begin

        end;
      end;
    end;
Ist ein Großteil der Meldungen nicht durch die Verwendung von Savedialog schon ausgeschlossen?
  Mit Zitat antworten Zitat
TiGü

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

AW: RAD Server - Download einer Datei über die RAD Server komponenten

  Alt 25. Nov 2021, 11:29
Gewiss, aber in dreieinhalb Monaten refaktorist du das oder jemand anderes so, dass es eine eigene Methode wird.
Mit reiner Übergabe des Dateinamens als String damit keine Koppelung zwischen SaveDialog und abspeichern besteht und dann geht's wieder von vorne los.
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#10

AW: RAD Server - Download einer Datei über die RAD Server komponenten

  Alt 25. Nov 2021, 11:50
Gewiss, aber in dreieinhalb Monaten refaktorist du das oder jemand anderes so, dass es eine eigene Methode wird.
Mit reiner Übergabe des Dateinamens als String damit keine Koppelung zwischen SaveDialog und abspeichern besteht und dann geht's wieder von vorne los.
na dann zieh ich das doch einfach mal in die Zukunft und mach direkt eine eigene Methode draus, besser ist das

Danke für die Hinweise, hast ja absolut recht
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:57 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