![]() |
IdFTPServer: Fehler direkt nach dem Login???
Hallo!
Ich habe mir einen kleinen FTP-Server mit TIdFTPServer gebastelt und teste ihn mit Windows Explorer. Nach dem Login sollten normalerweise die Ornder und Dateien aufgelistet werden, die in dem selben Ordner liegen, wie die Server-Datei. Passiert aber nicht. Stattdesen bekomme ich eine Fehlermeldung vom Explorer: Beim Öffnen des Ordners auf dem FTP-Server ist ein Fehler aufgetreten. Stellen Sie sicher, dass Sie die erforderlichen Zugriffsrechte für den Ordner haben. Details: In den Microsoft-Interneterweiterungen ist ein interner Fehler aufgetreten. Was ist das? Mache ich etwas falsch? Welche Zugriffsrechte? Hier meine Login-Kode:
Delphi-Quellcode:
procedure TForm1.FTPServerUserLogin(ASender: TIdFTPServerContext; const AUsername, APassword: string; var AAuthenticated: Boolean);
begin AAuthenticated := false; if AUsername = 'system' then begin AAuthenticated := FTPAdminLogin(APassword); if not AAuthenticated then exit; ASender.HomeDir := '\'; end; end; |
Re: IdFTPServer: Fehler direkt nach dem Login???
Hi romber,
wie testest Du mit dem Windows Explorer? Kopierst Du den Login-Text ( ![]() Was passiert, wenn Du mit einem anderen FTP Client auf Deinen Server zugreifst? Gruß, Assertor |
Re: IdFTPServer: Fehler direkt nach dem Login???
Ich gebe im Explorer die FTP-Adresse ein (
![]() Mit SmartFTP habe ich es auch probiert. Die Verbindung wird aufgebaut und dann Serverseitig wieder getrennt. Übrigens, wenn ich den Beispiel aus den Indy-Demos ausführe, passiert genau das selbe. |
Re: IdFTPServer: Fehler direkt nach dem Login???
Bis jetzt hast du uns ja nur den Quelltext für das Login gezeigt. Wie sieht dein Quelltext für das Zurückliefern der Dateien aus?
|
Re: IdFTPServer: Fehler direkt nach dem Login???
Bis auf UserLogin und dazugehörige Danenbank-Funktion habe ich die Code aus dem Indy-Beiespiel benutzt. Dann wollte ich es noch um einige Events erweitern und das ganze in Form eines Dienstel laufen lassen. Aber bereits jetzt funktioniert es nicht richtig, deswegen komme ich nicht weiter.
Delphi-Quellcode:
unit uFTPServer;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPServer, IdCmdTCPServer, IdFTPList, IdExplicitTLSClientServerBase, IdFTPServer, StdCtrls, IdFTPListOutput; type TForm1 = class(TForm) IdFTPServer1: TIdFTPServer; procedure IdFTPServer1UserLogin(ASender: TIdFTPServerContext; const AUsername, APassword: string; var AAuthenticated: Boolean); procedure IdFTPServer1RemoveDirectory(ASender: TIdFTPServerContext; var VDirectory: string); procedure IdFTPServer1MakeDirectory(ASender: TIdFTPServerContext; var VDirectory: string); procedure IdFTPServer1RetrieveFile(ASender: TIdFTPServerContext; const AFileName: string; var VStream: TStream); procedure IdFTPServer1GetFileSize(ASender: TIdFTPServerContext; const AFilename: string; var VFileSize: Int64); procedure IdFTPServer1StoreFile(ASender: TIdFTPServerContext; const AFileName: string; AAppend: Boolean; var VStream: TStream); procedure IdFTPServer1ListDirectory(ASender: TIdFTPServerContext; const APath: string; ADirectoryListing: TIdFTPListOutput; const ACmd, ASwitches: string); procedure FormCreate(Sender: TObject); procedure IdFTPServer1DeleteFile(ASender: TIdFTPServerContext; const APathName: string); procedure IdFTPServer1ChangeDirectory(ASender: TIdFTPServerContext; var VDirectory: string); procedure btnCloseClick(Sender: TObject); private function ReplaceChars(APath: String): String; function GetSizeOfFile(AFile : String) : Integer; { Private declarations } public { Public declarations } end; var Form1: TForm1; AppDir: String; implementation {$R *.DFM} uses DBLogin; procedure TForm1.btnCloseClick(Sender: TObject); begin IdFTPServer1.Active := false; close; end; function TForm1.ReplaceChars(APath:String):String; var s:string; begin s := StringReplace(APath, '/', '\', [rfReplaceAll]); s := StringReplace(s, '\\', '\', [rfReplaceAll]); Result := s; end; function TForm1.GetSizeOfFile(AFile : String) : Integer; var FStream : TFileStream; begin Try FStream := TFileStream.Create(AFile, fmOpenRead); Try Result := FStream.Size; Finally FreeAndNil(FStream); End; Except Result := 0; End; end; procedure TForm1.IdFTPServer1ChangeDirectory(ASender: TIdFTPServerContext; var VDirectory: string); begin ASender.CurrentDir := VDirectory; end; procedure TForm1.IdFTPServer1DeleteFile(ASender: TIdFTPServerContext; const APathName: string); begin DeleteFile(ReplaceChars(AppDir+ASender.CurrentDir+'\'+APathname)); end; procedure TForm1.FormCreate(Sender: TObject); begin AppDir := ExtractFilePath(Application.Exename); end; procedure TForm1.IdFTPServer1ListDirectory(ASender: TIdFTPServerContext; const APath: string; ADirectoryListing: TIdFTPListOutput; const ACmd, ASwitches: string); var LFTPItem :TIdFTPListItem; SR : TSearchRec; SRI : Integer; begin ADirectoryListing.DirFormat := doUnix; SRI := FindFirst(AppDir + APath + '\*.*', faAnyFile - faHidden - faSysFile, SR); While SRI = 0 do begin LFTPItem := ADirectoryListing.Add; LFTPItem.FileName := SR.Name; LFTPItem.Size := SR.Size; LFTPItem.ModifiedDate := FileDateToDateTime(SR.Time); if SR.Attr = faDirectory then LFTPItem.ItemType := ditDirectory else LFTPItem.ItemType := ditFile; SRI := FindNext(SR); end; FindClose(SR); SetCurrentDir(AppDir + APath + '\..'); end; procedure TForm1.IdFTPServer1StoreFile(ASender: TIdFTPServerContext; const AFileName: string; AAppend: Boolean; var VStream: TStream); begin if not Aappend then VStream := TFileStream.Create(ReplaceChars(AppDir+AFilename),fmCreate) else VStream := TFileStream.Create(ReplaceChars(AppDir+AFilename),fmOpenWrite) end; procedure TForm1.IdFTPServer1GetFileSize(ASender: TIdFTPServerContext; const AFilename: string; var VFileSize: Int64); Var LFile : String; begin LFile := ReplaceChars( AppDir + AFilename ); try If FileExists(LFile) then VFileSize := GetSizeOfFile(LFile) else VFileSize := 0; except VFileSize := 0; end; end; procedure TForm1.IdFTPServer1RetrieveFile(ASender: TIdFTPServerContext; const AFileName: string; var VStream: TStream); begin VStream := TFileStream.Create(ReplaceChars(AppDir+AFilename),fmOpenRead); end; procedure TForm1.IdFTPServer1MakeDirectory(ASender: TIdFTPServerContext; var VDirectory: string); begin if not ForceDirectories(ReplaceChars(AppDir + VDirectory)) then begin Raise Exception.Create('Unable to create directory'); end; end; procedure TForm1.IdFTPServer1RemoveDirectory(ASender: TIdFTPServerContext; var VDirectory: string); Var LFile : String; begin LFile := ReplaceChars(AppDir + VDirectory); end; procedure TForm1.IdFTPServer1UserLogin(ASender: TIdFTPServerContext; const AUsername, APassword: string; var AAuthenticated: Boolean); begin AAuthenticated := false; if AUsername = 'system' then begin AAuthenticated := FTPAdminLogin(APassword); if not AAuthenticated then exit; ASender.HomeDir := '\'; end; end; end. |
Re: IdFTPServer: Fehler direkt nach dem Login???
Das Problem besteht nach wie vor. Keine Ideen, woran es liegen kann?
|
Re: IdFTPServer: Fehler direkt nach dem Login???
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
den Security Einstellungen (Zugriffsrechte des Ordners) des OS. Oder an
Delphi-Quellcode:
versuch mal
SRI := FindFirst(AppDir + APath + '\*.*', faAnyFile - faHidden - faSysFile, SR);
Delphi-Quellcode:
SRI := FindFirst(AppDir + APath + '\*.*', faReadOnly or faHidden or faSysFile, SR);
FTP-Server Settings: Login beliebig, Port = 38 lg. Astat |
Re: IdFTPServer: Fehler direkt nach dem Login???
@astat
Vielen Dank für diesen Test-Server. Funktioniert einwandfei! Mein FTP-Server funktioniert nach wie vor nicht. :( Was mache ich den falsch? Ich habe schon testweise den Root-Ordner komlpett freigegeben, welche Zugriffsrechte braucht der FTP noch??? Wenn ich auf den Server aus dem Internet Explorer zugreife, werden nach dem Login die Dateien und Ordner aufgelistet und man kann normal navigigieren. Warum geht das von Windows Explorer aus nicht? |
Re: IdFTPServer: Fehler direkt nach dem Login???
-> Push
Leute, Hilfe! Ich muss das Problem langsam gelöst bekommen, doch bis jetzt scheitern alle Versuche. Den Server von Astat funktioniert einwandfrei. Leider hat er keine Code veröffentlicht. Hilfe! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz