ďťż

Ładny brzuch

W jaki sposób z poziomu delphi wysłać plik (np data.txt) na serwer ftp, oczywiście
przy założeniu że znam login hasło i adres konkretnego serwera FTP.



albo za pomoca INDY/ICS (odsylam do przykladow), albo przez zwyklego socketa :) www.ali.kom.pl -> artykuly -> ftp. tyle ze tam nie ma jak wyslac w trybie PASV.
// EDIT: daj znac jak potrzebujesz przyklad to wrzuce na server
Użytkownik Ali240 edytował ten post 05 lipiec 2005, 17:53
dla indy możesz tak (idFTP):
Ustawiasz we właściwościach adres, login i hasło.
Kod:

var plik: string; begin plik := 'C:\plik.txt'; idFTP1.conect; try  IDFTP1.PassiveMode := True;  IDFTP1.TransferType := ftASCII; //opcjonalnie  IDFTP1.Put(plik, ExtractFileName(plik)); finally  IDFTP.Disconnect; end; end;

Jejeje jak ja kocham winapi :P
Passive oczywiście :Duses winsock; function resolve(s:string):integer; var h:phostent; begin h:=ptr(LocalAlloc(0,sizeof(hostent))); h:=gethostbyname(pchar(s)); result:=integer(pointer(integer(h)+28)^); end; procedure TForm1.Button1Click(Sender: TObject); var wd:wsadata; s, s2:integer; ad, ad2:sockaddr_in; f, r, razem, rr:cardinal; b, bb, pliczek:pchar; st:string; list:tstringlist; begin pliczek:='c:\plik.txt'; Memo1.Clear; b:=ptr(localalloc(0,256)); WSAStartup($101,wd); s:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); ad.sin_family:=AF_INET; ad.sin_port:=ntohs(21); ad.sin_addr.S_addr:=resolve('ftp.members.lycos.co.uk'); if connect(s,ad,16)=0 then begin repeat fillchar(b^,256,0); recv(s,b^,256,0); Memo1.Lines.Add(b ); until pos('220 ',b )=1; bb:='USER użyszkodnik'#13#10; <- nazwa usera send(s,bb^,length(bb),0); repeat fillchar(b^,256,0); recv(s,b^,256,0); Memo1.Lines.Add(b ); until pos('331 ',b )=1; bb:='PASS hasło'#13#10; <- hasło send(s,bb^,length(bb ),0); repeat fillchar(b^,256,0); recv(s,b^,256,0); Memo1.Lines.Add(b ); if pos('530',b )=1 then begin MessageBox(handle,'Złe hasło!','',MB_OK+MB_IConerror); exit; end; until pos('230 ',b )=1; bb:='CWD /'#13#10; send(s,bb^,length(bb ),0); repeat fillchar(b^,256,0); recv(s,b^,256,0); Memo1.Lines.Add(b ); until pos('250 ',b )=1; bb:='TYPE i'#13#10; send(s,bb^,length(bb ),0); fillchar(b^,256,0); recv(s,b^,256,0); Memo1.Lines.Add(b ); bb:='PASV'#13#10; send(s,bb^,length(bb ),0); fillchar(b^,256,0); recv(s,b^,256,0); Memo1.Lines.Add(b ); st:=copy(b,pos('(',b )+1,length(b )-pos('(',b )); st:=copy(st,1,pos(')',st)-1); list:=tstringlist.Create; ExtractStrings([','],[' '],pchar(st),list); s2:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); ad2.sin_family:=AF_INET; ad2.sin_port:=ntohs(makeword(strtoint(list[5]),strtoint(list[4]))); ad2.sin_addr.S_addr:=inet_addr(pchar(list[0]+'.'+list[1]+'.'+list[ 2]+'.'+list[3])); connect(s2,ad2,16); bb:='REST 0'#13#10; send(s,bb^,length(bb ),0); fillchar(b^,256,0); recv(s,b^,256,0); Memo1.Lines.Add(b ); bb:=pchar('STOR '+extractfilename(pliczek)+#13#10); send(s,bb^,length(bb ),0); fillchar(b^,256,0); recv(s,b^,256,0); Memo1.Lines.Add(b ); f:=CreateFile(pliczek,GENERIC_READ,0,nil,OPEN_EXISTING,0,0); if integer(f)<>-1 then begin bb:=ptr(localalloc(0,4096)); razem:=0; rr:=getfilesize(f,nil); Memo1.Lines.Add(''); repeat ReadFile(f,bb^,4096,r,nil); inc(razem,r); send(s2,bb^,r,0); Memo1.Lines.Strings[Memo1.Lines.Count-1]:='Wysyłanie pliku '+extractfilename(pliczek)+': '+ inttostr(razem)+'/'+inttostr(rr)+' ('+inttostr(razem*100 div rr)+'%)'; Application.ProcessMessages; until razem=rr; Memo1.Lines.Add(''); closesocket(s2); fillchar(b^,256,0); recv(s,b^,256,0); Memo1.Lines.Add(b ); bb:='QUIT'+#13#10; send(s,bb^,length(bb ),0); fillchar(b^,256,0); recv(s,b^,256,0); Memo1.Lines.Add(b ); end else MessageBox(handle,'Nie można otworzyć pliku!','',MB_OK+MB_IConerror); end else MessageBox(handle,'Nie można się połączyć z serwerem!','',MB_OK+MB_IConerror); closesocket(s); WSACleanup; end;
Użytkownik Cyrkiel edytował ten post 07 lipiec 2005, 22:48


http://www.indyproje...0_FTPClient.zip


idFTP1.conect;

http://forum.ks-eksp...5& hl=upload+ftp
http://forum.ks-eksp...7&hl=upload+ftp

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •