[delphi] idhttp i pobieranie przyrostowe

0

hi, mam prosbe o pomoc odnosnie pobierania za pomoca idhttp - przyrostowego - bo obecnie to plik sie pojawia dopiero jak sie caly sciagnie.
Chyba gdzies Olesio kiedys pytal oto moze ma rozwiazanie lub ktos inny ma.

drugi problem to taki zeby pauzowac i wznawiac takie pobieranie, zakladajac ze uporamy sie przyrostowym to moze ktos i z tym udzieli wsparcia,

pozdrawiam
serdecznie

0

Ja pytałem bardziej o Synapse, Indy się dawno nie bawiłem, ale pewnie jest takie zdarzenie
jak w Synapse OnSock.Status gdzie mozna uzyskac informacje o pobieraniu, jak chcesz to z
poniższego źródła. To prosty downloader plików z wrzuta.pl. Przenalizuj, jak zrobilem to dla
Synapse w procedurze TMainForm.SockCallBack. Działa chociaż nieidealnie, zaś Misiekd czyli
ekspert od Synapse twierdzi pewnie słuszcznie że aby mieć dynamiczny zapis, to trzeba by
się sporo nakombinowac. A źródło mojego downloadera w Delphi 7 lub wyższym - powinno
się skompilować bez problemów, bo wszystko co potrzebne dołączone jest do projektu, bo
nie pamiętam jak to było w IdHttp, ale wydaje mi się że jak pobierałem plik z http://www.speedyshare.com/files/22220727/wrzuta_downloader.rary pobieraniu przeglądarką internetową.
http://www.speedyshare.com/files/22220727/wrzuta_downloader.rar

0

musze pozostac przy indy, przyrostowe to ma zwykly URLMON nawet ale zadnej szerszej obslugi nie ma...

0

No to wiele nie pomoge, może ktoś inny będzie coś wiedzial, mi się tylko wydaje, że robiąc zapis do
TFileStreama rozmiar pliku tak tworzonego rósł wraz z postepem pobierania. Ale mogę źle pamiętać.

0

W Indy (wersja 10 ale w starszych chyba też) stream ma od początku wielkość pliku, który ma być pobrany ale tak sobie pomyślałem, że IdHTTP (i nie tylko) ma zdarzenie

procedure OnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);

w AWorkCount mamy ile bajtów zostało pobrane to gdyby w tym zdarzeniu zapisywał do pliku z stream'a tyle bajtów na ile wskazuje AWorkCount teoretycznie było by dobrze tylko jest wada zawsze trzeba by zapisywać całość do pliku.
Można by w jakiś sposób w zmiennej zapisywać różnicę pomiędzy aktualną wielkością a wielkością z poprzedniego zapisu i jakoś ten obszar tylko dopisywać do pliku ale tu trzeba by pokombinować.

0

bez problemu można zrobić wznawianie, zatrzymywanie i dokańczanie za pomocą idHTTP z pakietu Indy. idhttp podczas pobierania rezerwuje miejsce na dysku wypełniając plik zerami. Wystarczy odczytać miejsce gdzie rozpoczynają się zera i od tego bajtu posłać Content-Range.
Przed pobieraniem także ustawić wskaźnik strumienia w miejsce ostatniego zera. Przerywanie można zrealizować używając wątków (zatrzymanie wątku, zakończenie itp) lub poprzez IdHTTP1.Disconnect np w zdarzeniu OnWork

1 użytkowników online, w tym zalogowanych: 0, gości: 1