Indy FTP
-
Ich denke mal, dass du im OnListDirectory-Event dafür sorgen musst, dass ADirectoryListing entsprechend mit Dateinamen etc. gefüllt wird, damit du auch was zum Auflisten hast.
Die Serverkomponente ist nur für den reinen FTP-Teil zuständig, die lokalen Dateioperationen musst du selbst implementieren.
-
dass ADirectoryListing entsprechend mit Dateinamen etc. gefüllt wird, damit du auch was zum Auflisten hast
hmm verstehe ich nicht
kannst du mir bitte ein beispiel machen? für mich ergibt dann nähmlich "HomeDir" und "CurrentDir" keinen sinn mehr wenn die teinamen in ADirectoryListing gespiesst werden.
-
Keine Ahnung, was mit HomeDir und CurrentDir ist. Wirf doch einfach mal einen Blick in die Hilfe, da steht zB. unter TIdFTPServer.OnListDirectory ganz eindeutig:
Use the platform- specific API calls needed to retrieve the list of files for the specified directory, and populate the contents of ADirectoryListing.
-
hallo jansen
ich komme da irgendwie nicht klar. kriege das listen einfach nicht hin. weist du wo ich ein beispiel source zur indy ftp server componente downloaden kann?
-
Eigentlich auf der Indy-HP. Sind aber glaub ich alle für Delphi.
-
ich weis, so schlau war ich auch schon
demo ftp client: ja
demo ftp server: nein!
-
Stell Dir mal vor.... Du Programmierst ein FTP-Server mit einem
ROOT-Zugriff (z.B. auf C:\) und jeder kann so tief wie möglich in
die Verzeichnisse (auch c:\windows) durch serven. HILFE blos das nicht!!
Es ist doch klar das Fremd-Operationen auf einen Computer beschränkt sein
müssen. Um dem Anwender [einen Bereich] zu übergeben, muß du diesen difinieren,
daher du stellst im den BasicROOT zur verfühgung (HomeDir), am besten
programmierst du so das für den User eine Dir-und-Directory Datei angelegt wird
sobald der User eine neue Dir anlegt wird diese ebenso in diesem Listing gespeichert, per OnClick auf einem Dir wechselst du im CurrentDir zu diesem
Verzeichnis und listet dessen Inhalt (also Dateien) und übergiebst in (ADirectoryListing) wird eine Datei übertragen, speicher dessen ebenso darin.Fazit: Du kannst angeben welches das Hauptverzeichniss ist in HomeDir (z.B.:c:\inetpub\wwwroot\user1\html).
Die Dateioperationen mußt du selbst steuern, wenn der user1 z.B. in seinem verzeichniss "Grafik" will, setzt du CurrentDir auf z.B. c:\inetpub\wwwroot\user1\html\Grafik
liest denn Inhalt dieser Dir ein und Übergiebst an ADirectoryListing.
Will user1 jetzt eine Datei löschen so mußt du (bzw. dein Programm) diese datei löschen und auch aus "ADirectoryListing" rausnehmen, sendet user1 eine datei, so speichert dein Proggi diese und giebt es auch in "ADirectoryListing" an.Also::UmEinenFTPServer->zuProgrammieren mußt du einiges an Datei-Operationen
mit programmieren, denn das löst die Komponente micht von selbst.HomeDir = Start- bzw. Hauptverzeichnis des users (z.B. c:\wwwroot\user)
CurrentDir = Aktuelles Verzeichnis in dem sich der user befindet (z.B. c:\wwwroot\user\Grafik
ADirectoryListing = Inhalt des aktuellen Verzeichniss
Per OnEvent Handling Dateioperationen ausführen.gruß Micha
PS: sollte ich irgendwie Falsch liegen, bitte Korigieren.
[ Dieser Beitrag wurde am 12.04.2003 um 00:06 Uhr von promicha editiert. ]
-
ich versteh das icht mit dem directorylisting
hier der code:void __fastcall TForm1::ftpListDirectory(TIdFTPServerThread *ASender, const AnsiString APath, TIdFTPListItems *ADirectoryListing) { //.... und nun? } //--------------------------------------------------------------------------- void __fastcall TForm1::ftpUserLogin(TIdFTPServerThread *ASender, const AnsiString AUsername, const AnsiString APassword, bool &AAuthenticated) { if(AUsername == "test" && APassword == "test") { ASender->HomeDir = "C:\\"; ASender->Authenticated = true; } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { ftp->Active = true; }
was muss denn nun in ftpListDirectory?
-
void __fastcall TForm1::ftpListDirectory(TIdFTPServerThread *ASender, const AnsiString APath, TIdFTPListItems *ADirectoryListing) { //.... und nun? } //---------------------------------------------------------------------------
1. In APath steht (meines Wissens) der Pfad den der User angefordert hat, also
wenn er Beispielsweise in ein unterverzeichnis wechselt. PRÜFE ob der user Rechte hat zu diesem Verzeichniss, also wenn sein HomeDir z.B. c:\wwwroot\user1
ist und APath ist c:\wwwroot\user1\grafik dann past es, Beispiel einfache Überprüfung:bool zugriff; if (APath.SubString(0,ASender->HomeDir.Length()) == ASender->HomeDir) zugriff = true; else zugriff = false;
Anschliessend liest die Dateinamen aus dem Verzeichniss welcher in APath steht
in ADirectoryListing ein. Ich habe diese IndyKomponente bei mir nicht, daher kann ich jetzt nicht sagen in welcher Form die Daten an ADirectoryListing übergeben werden, daher probiere einfach mal ADirectoryListing-> und nach dem du
das > eingeben hast erscheint eine Hilfe (vieleicht ADirectoryListing->AddItems.. oder so) probiere mal durch.cu micha
-
ich kriegs einfach nicht hin es ist hoffnungslos
weis den niemand wie genau das listen geht? oder wo ich ein bsp. finde? oder eine andere:Free
BCB taugliche
FTP Server componente?
?