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
TiGü

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

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

  Alt 25. Nov 2021, 08: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 09:01 Uhr)
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
334 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 25. Nov 2021, 09: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 09:03 Uhr) Grund: Fehler im Code
  Mit Zitat antworten Zitat
TiGü

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

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

  Alt 25. Nov 2021, 09: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
334 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 25. Nov 2021, 10: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.074 Beiträge
 
Delphi 10.4 Sydney
 
#5

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

  Alt 25. Nov 2021, 10: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
334 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 25. Nov 2021, 10: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
Benutzerbild von himitsu
himitsu
Online

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

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

  Alt 25. Nov 2021, 11:49
Jupp, wollte quasi sagen:

* wenn vorhanden, dann kannst das auch gleich binär speichern (wenn es z.B. als TByte vorliegt)

* und wenn es ein String oder TArray<String> oder TBytes bzw. TArray<Byte> ist, dann kannst das über Delphi-Referenz durchsuchenTFile auch direkt als Einzeiler speichern, anstatt erst eine Klasse zu erstellen (die oben, in deinem BeispielCode, auch noch vergessen wurde wieder freizugeben)
Ein Therapeut entspricht 1024 Gigapeut.
  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 04:55 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