Witam serdecznie,
Szukam rozwiązania palącego problemu. Próbuje napisać program, który potrafi pobrać pliki z internetu. Niby proste.
Używam Delphi z Indy 10 (Berlin 10.1 free) oraz idHTTP.
Pobranie pliku z serwera bez szyfrowania jest proste i działa doskonale.
Problemem jest jednak to, że pliki mogą ważyć ponad 100MB. Dlatego zdecydowałem się umieścić plik na dysku internetowym (powiedzmy One Drive, mam tutaj >1TB). Ale może to być dowolny serwer HTTPS (Google Drive, DropBox, Mega, etc).
Mogę tam wygenerować linka i udostępnić go publicznie. Jest OK. Pobierając go przeglądarką wszystko śmiga...
Problem:
Jak taki plik pobrać w aplikacji napisanej w Delphi? Kombinowałem z Indy i SSL (biblioteki ssl są w katalogu)
Nie działa. Nie ma błędów. Nie ma też reakcji... Problemem chyba są liczne przekierowania, nie wiem.
procedure DownloadFile;
var
GetData : TFileStream;
sURL: string;
begin
SERVER_UPDATE_URL := 'https://1drv.ms/u/s!AhCBb-CkOnQpixi2Vmq9RoLxqwXQ'; // <-- mój przykładowy plik (instalator dla winamp, ale to nieważne co to jest)
try
GetData := TFileStream.Create(TEMP_DIR + '\' + 'NAZWA_PLIKU.exe', fmOpenWrite or fmCreate); //< -- plik zapisywany w TEMP
try
HTTP.Get(SERVER_UPDATE_URL, GetData);
finally
GetData.Free;
end;
except
on E: EIdOSSLCouldNotLoadSSLLibrary do
ShowMessage(E.message);
on E: EIdHTTPProtocolException do
ShowMessage(E.message);
on E: EIdConnClosedGracefully do
ShowMessage(E.message);
on E: EIdSocketError do
ShowMessage(E.message);
on E: EIdException do
ShowMessage(E.message);
on E: Exception do
ShowMessage(E.message);
end;
// W katalogu mam bibliteki SSL (ssleay32.dll, libeay32.dll).
// Na formie idHTTP, IdSSLIOHandlerSocketOpenSSL, IdCookieManager
Reasumując, czy ktoś z was ma wiedzę jak pobrać plik z tego typu serwerów (niech będzie OneDrive) programowo?
Program ma połączyć się z dyskiem OneDrive (Google, mega etc), pobrać plik i wyświetlić progress (postęp pobierania, ilość pobranych, średnia szybkość).
Jestem w stanie nawet zapłacić drobną kwotę za rozwiązanie lub pomoc...
-Pawel