Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Datei mittels TRestHttp herunterladen + Events (https://www.delphipraxis.net/210350-datei-mittels-tresthttp-herunterladen-events.html)

DieDolly 10. Apr 2022 14:52


Datei mittels TRestHttp herunterladen + Events
 
Nachdem ich heute alles von TIdHTTP zu TRESTHTTP umgeschrieben habe und wieder Kontakt zu meinem Server habe, steht eine nächste Sache an.
Ich lade Dateien mit den Indys runter und nutze dafür HTTPWorkBegin, HTTPWork und HTTPWorkEnd. Der Dateidownload selber sieht so aus
Delphi-Quellcode:
constructor THTTPFileDownload.Create(AOwner: TComponent);
begin
 inherited;

 FIOHndl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
 FIOHndl.SSLOptions.SSLVersions := [sslvTLSv1_2];

 IOHandler := FIOHndl;

 OnWork := HTTPWork;
 OnWorkBegin := HTTPWorkBegin;
 OnWorkEnd := HTTPWorkEnd;
end;

function THTTPFileDownload.DownloadFile(const aFileUrl: string; const aDestinationFile: string): Boolean;
var
 LDestStream: TFileStream;
 aPath: string;
begin
 try
  aPath := ExtractFilePath(aDestinationFile);

  if aPath <> '' then
   ForceDirectories(aPath);

  LDestStream := TFileStream.Create(aDestinationFile, fmCreate);
  try
   Get(aFileUrl, LDestStream);

   Result := ResponseCode = 200;
  finally
   FreeAndNil(LDestStream);
  end;
 except
  Result := False;
 end;
end;
Ich denke mit REST.HttpClient sollte das zu 99% gleich sein. Aber wie bekomme ich das mit den Events HTTPWorkBegin, HTTPWork und HTTPWorkEnd hin?
Noch ganz weg von Indy bin ich aber danach auch noch nicht. Ich sende aus meinem Programm heraus E-Mails via SMTP. Das kann Rest vermutlich überhaupt nicht, oder?

Uwe Raabe 10. Apr 2022 15:19

AW: Datei mittels TRestHttp herunterladen + Events
 
Zitat:

Zitat von DieDolly (Beitrag 1504485)
Ich denke mit REST.HttpClient sollte das zu 99% gleich sein. Aber wie bekomme ich das mit den Events HTTPWorkBegin, HTTPWork und HTTPWorkEnd hin?

Dieses Konzept haben die REST-Komponenten nicht. Wofür verwendest du denn diese Events?

Zitat:

Zitat von DieDolly (Beitrag 1504485)
Ich sende aus meinem Programm heraus E-Mails via SMTP. Das kann Rest vermutlich überhaupt nicht, oder?

Nein, das ist rein HTTP(S). SMTP ist ein völlig anderer Bereich.

DieDolly 10. Apr 2022 15:24

AW: Datei mittels TRestHttp herunterladen + Events
 
Die Events habe ich mit den Indies drin gehabt, um den Downloadfortschritt anzuzeigen. Ein Programmupdate ist i.d.R zwischen 15 und 30 MB groß.
Wäre eine Fortschrittsanzeige (Prozent, keine ProgressBar) aus Sicht der Nutzerfreundlichkeit hier vernachlässigbar?
Falls ja, lasse ich das einfach weg.

Ist eine gewisse Aufgabe in meinem Programm erledigt, kann man sich via SMTP einen Report zusenden lassen.
Da ich keine Datenerhebung in meinem Programm habe, auch keine anonyme, weiß ich nicht, wieviele Nutzer diesen Programmteil überhaupt nutzen.
Vielleicht ist diese Praktik ja schon veraltet und kann schon alleine deswegen raus.

Uwe Raabe 10. Apr 2022 16:49

AW: Datei mittels TRestHttp herunterladen + Events
 
Zitat:

Zitat von DieDolly (Beitrag 1504488)
Die Events habe ich mit den Indies drin gehabt, um den Downloadfortschritt anzuzeigen. Ein Programmupdate ist i.d.R zwischen 15 und 30 MB groß.
Wäre eine Fortschrittsanzeige (Prozent, keine ProgressBar) aus Sicht der Nutzerfreundlichkeit hier vernachlässigbar?

Falls es eine VCL-Anwendung ist, böte sich auch TDownLoadURL (Vcl.ExtActns.pas) an. Dort gibt es einen OnDownloadprogress-Event.

Zitat:

Zitat von DieDolly (Beitrag 1504488)
Ist eine gewisse Aufgabe in meinem Programm erledigt, kann man sich via SMTP einen Report zusenden lassen.

Dafür käme vielleicht TSendMail (ebenfalls Vcl.ExtActns.pas) in Frage. Das verwendet allerdings MAPI.

DieDolly 10. Apr 2022 16:57

AW: Datei mittels TRestHttp herunterladen + Events
 
MAPI habe ich eben geprüft, bei mir jedenfalls nicht verfügbar, vermutlich weil ich Thunderbird Portable nutze.
Ich denke das mit SMTP lasse ich einfach weg. Kommt mir auch veraltet vor.
Hauptsache ich bin die OpenSSL-DLLs los.

Den OnDownloadProgress-Event brauche ich auch nicht zwingend. Bei maximal 30 MB ist das unnötig.
Um bei REST zu bleiben, mache ich das vielleicht mit REST.Client.TDownloadURL.

Warum ich aber von Indy komplett weg will, sollte hier ersichtlich sein:
https://github.com/IndySockets/Indy/pull/299

> Pull request vom 29 Apr 2020
> dann vor 6 Tagen: "What is the status of this Pull request?" >> "It is still pending review".

TurboMagic 12. Apr 2022 18:53

AW: Datei mittels TRestHttp herunterladen + Events
 
Nur konsumieren wollen führt halt nicht dazu, dass solche Open Source Projekte Fortschritt machen...
...das war jetzt nicht persönlich gemeint, aber mehr Entwickler in solchen Projekten wäre schon hilfreich!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 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