Einzelnen Beitrag anzeigen

Benutzerbild von Rued
Rued

Registriert seit: 14. Mai 2008
Ort: Schleching
92 Beiträge
 
Delphi 12 Athens
 
#1

Download einer Datei in App

  Alt 17. Mär 2025, 12:53
Hallo!
Eigentlich ganz schön, noch einmal etwas Neues zu beginnen, aber manchmal macht mich das wahnsinnig, dass kaum `was funzzt, was bei PC-Anwendungen seit fast dreißig Jahren funzzt.

Ich will in meiner Android-App eine Datei herunterladen und habe es zunächst ganz einfach probiert:

Delphi-Quellcode:
procedure Herunterladen(Quelle, Ziel: string);
var Stream: TMemoryStream;
begin

  Stream := TMemoryStream.Create;

  try
    FMain.IdHTTP1.Get(Quelle, Stream);
    Stream.SaveToFile(Ziel);
  finally
    Stream.Free;
    FMain.IdHTTP1.Free;
  end;

end;
Ergebnis ist eine Fehlermeldung:
Im Projekt Name.apk ist eine Exception der Klasse EIdOSSLCouldNotLoadSSLLibrary mit der Meldung 'SSL.-Bibliothek konnte nicht geladen werden.' aufgetreten.

Also habe ich aufgerüstet. Alles, was nicht schnell genug auf den Bäumen war, in die Uses gefercht:
Delphi-Quellcode:
  System.Net.URLClient, System.Net.HttpClient, System.Net.HttpClientComponent,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
  IdSSLOpenSSL, IdSSLOpenSSLHeaders, IdIOHandler,
  IdIOHandlerSocket, IdIOHandlerStack, IdSSL;
Über "Bereitstellung" unter "Projekt" die Dateien libcrypto.so.1.1 und libssl.so.1.1 eingebunden.

Und die Routine wie folgt erweitert:
Delphi-Quellcode:
procedure Herunterladen(Quelle, Ziel: string);
var
  Stream: TMemoryStream;
  HTTP: TIdHTTP;
  SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  Stream := TMemoryStream.Create;
  HTTP := TIdHTTP.Create(nil);
  SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);

  try
    SSLHandler.SSLOptions.Method := sslvTLSv1_2;
    SSLHandler.SSLOptions.Mode := sslmUnassigned;
    HTTP.IOHandler := SSLHandler;

    HTTP.Get(Quelle, Stream);
    Stream.SaveToFile(Ziel);
  finally
    Stream.Free;
    SSLHandler.Free;
    HTTP.Free;
  end;
end;
Trauriges Ergebnis ist dieselbe Fehlermeldung.

Wie bekomme ich die dlls eingebunden?
Rüdiger Droste
  Mit Zitat antworten Zitat