FTP z WinInet lub UrlMon

0

Chciałbym się więcej dowiedzieć na temat wysyłania plików do/z serwera, przy użyciu Delphi. Wiem, że są do tego komponenty TidFTP, TidHTTP, ale chciałbym użyć do tego funkcji z jakiejś z bibliotek (WinInet lub UrlMon). Proszę o podanie jakiejś strony lub o przesłanie mi materiałów na ten adres: [email protected]. Proszę też o wyjaśnienie mi, w jaki sposób można dociągnąć plik, którego proces ściągania został przerwany?

0

Szczegółowy opis WinInet:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/portal.asp

Przykładowa funkcja wysyłająca plik lokalny na serwer FTP:

[in] FileName - plik do wysłania;
[in] Host - nazwa hosta, np.: ftp.microsoft.com;
[in] FtpDir - katalog na FTP, do którego zostanie skopiowany FileName;
[in] UserName - nazwa użytkownika;
[in] Password - hasło;
[in, out] dwConnectingTime - czas nawiązywania połączenia (msec);
[in, out] dwSendingTime - czas wysyłania pliku (msec);
[in, out] Error - jeśli wystąpi jakiś błąd, tu zostanie informacja.

uses
  ......, WinInet, .........;
function FtpSendFile(const FileName, Host, FtpDir, UserName, Password: string;
  var dwConnectingTime, dwSendingTime: DWORD; var Error: string): boolean;
var
  hOpen, hConnect: HINTERNET;
  b: BOOL;
  tStartConnecting, tEndConnecting, tStartSending, tEndSending: DWORD;
begin
  Result := False;
  Error := '';

  hOpen := InternetOpen(
    '',
    INTERNET_OPEN_TYPE_PRECONFIG,
    '',
    '',
    0
    );

  if hOpen = nil then
  begin
    Error := 'InternetOpen Failed !';
    dwConnectingTime := 0;
    dwSendingTime := 0;
    Exit;
  end;


  tStartConnecting := GetTickCount;
  hConnect := InternetConnect(
    hOpen,
    PChar(Host),
    INTERNET_DEFAULT_FTP_PORT,
    PChar(UserName),
    PChar(Password),
    INTERNET_SERVICE_FTP,
    0,
    0
    );

  if hConnect = nil then
  begin
    Error := 'InternetConnect Failed !';
    InternetCloseHandle(hOpen);
    dwConnectingTime := 0;
    dwSendingTime := 0;
    Exit;
  end;

  tEndConnecting := GetTickCount;
  dwConnectingTime := tEndConnecting - tStartConnecting;


  if FtpDir = '' then FtpDir := '/';
  if not FtpSetCurrentDirectory(hConnect, PChar(FtpDir)) then
  begin
    Error := 'FtpSetCurrentDirectory Failed !';
    InternetCloseHandle(hConnect);
    InternetCloseHandle(hOpen);
    dwConnectingTime := 0;
    dwSendingTime := 0;
    Exit;
  end;


  tStartSending := GetTickCount;
  b := FtpPutFile(
    hConnect,
    PChar(FileName), //local file
    PChar(ExtractFileName(FileName)), //remote file
    FTP_TRANSFER_TYPE_BINARY, //lub ASCII dla plików tekstowych
    0
    );

  if not b then
  begin
    Error := 'FtpPutFile Failed !';
    InternetCloseHandle(hConnect);
    InternetCloseHandle(hOpen);
    dwSendingTime := 0;
    Exit;
  end;
  tEndSending := GetTickCount;
  dwSendingTime := tEndSending - tStartSending;

  InternetCloseHandle(hConnect);
  InternetCloseHandle(hOpen);
  Result := True;

end;
0

Wielkie dzięki, ale jabyś mógł mi podać jakąś strone, gdzie opis jest w j.polskim to był bym ci bardzo wdzięczny.

Bardzo interesujący przykład. Czy na twojej stronie znajduje się dokładny opis tego programu, ponieważ nie mogę znaleźć? Może źle szukam. Chociaż i tak większość z twojego kodu można się Domyślić to chciałbym nauczyć się dokładnych znaczeń funkcji.

0

.....strone, gdzie opis jest w j.polskim....

Niestety nie znam takich stron.

A propos dociągania pliku:
InternetOpen + InternetOpenUrl + InternetSetFilePointer + pętla(InternetReadFile + InternetWriteFile).


Czy na twojej stronie znajduje się dokładny opis tego programu, ponieważ nie mogę znaleźć?

Nie bardzo rozumiem co z tym wszystkim ma wspólnego moja strona?
Nawet o niej nie wspomniałem.
Ale skoro pytasz, to : Na mojej stronie nie ma żadnego opisu "tego" (jakiego?) programu.
Ale planuje umieścić (za tydzień, może 2; teraz nie mam czasu) krótki artykulik o wysyłaniu/pobieraniu plików przez Internet. Dużo ludzi mnie o to pyta.

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