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: twojaOdpowiedz@wp.pl. Proszę też o wyjaśnienie mi, w jaki sposób można dociągnąć plik, którego proces ściągania został przerwany?
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;
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.
.....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.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.