AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IdFTPServer: Fehler direkt nach dem Login???
Thema durchsuchen
Ansicht
Themen-Optionen

IdFTPServer: Fehler direkt nach dem Login???

Ein Thema von romber · begonnen am 19. Feb 2010 · letzter Beitrag vom 14. Mai 2010
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

IdFTPServer: Fehler direkt nach dem Login???

  Alt 19. Feb 2010, 19:51
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 = 'systemthen
  begin
    AAuthenticated := FTPAdminLogin(APassword);
    if not AAuthenticated then
    exit;
    ASender.HomeDir := '\';
  end;
end;
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#2

Re: IdFTPServer: Fehler direkt nach dem Login???

  Alt 19. Feb 2010, 22:11
Hi romber,

wie testest Du mit dem Windows Explorer? Kopierst Du den Login-Text (ftp://Username:Benutzername@xyz) direkt in die Adressleiste, oder nur den Servernamen? Wirst Du nach dem Login gefragt vom Explorer - sprich: Wann kommt der Fehler genau?

Was passiert, wenn Du mit einem anderen FTP Client auf Deinen Server zugreifst?

Gruß,
Assertor
Frederik
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: IdFTPServer: Fehler direkt nach dem Login???

  Alt 20. Feb 2010, 00:53
Ich gebe im Explorer die FTP-Adresse ein (ftp://xxx.xxx.xxx.xxx) und gebe dann im Loginfenster die Zugangsdaten ein. Der Login wird akzeptiert, ansonsten würde das Loginfenster wieder erscheinen, bis man sich einlogt. Dann kommt sofort dieses Fehler.
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: IdFTPServer: Fehler direkt nach dem Login???

  Alt 20. Feb 2010, 09:44
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?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#5

Re: IdFTPServer: Fehler direkt nach dem Login???

  Alt 20. Feb 2010, 12:39
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 = 'systemthen
  begin
    AAuthenticated := FTPAdminLogin(APassword);
    if not AAuthenticated then
    exit;
    ASender.HomeDir := '\';
  end;
end;

end.
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#6

Re: IdFTPServer: Fehler direkt nach dem Login???

  Alt 26. Feb 2010, 18:28
Das Problem besteht nach wie vor. Keine Ideen, woran es liegen kann?
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#7

Re: IdFTPServer: Fehler direkt nach dem Login???

  Alt 26. Feb 2010, 19:17
Zitat von romber:
Das Problem besteht nach wie vor. Keine Ideen, woran es liegen kann?
Hallo romber, du kannst beigelegten FTP_Server versuchen, wenn es bei diesem nicht geht, liegt es an
den Security Einstellungen (Zugriffsrechte des Ordners) des OS.

Oder an

SRI := FindFirst(AppDir + APath + '\*.*', faAnyFile - faHidden - faSysFile, SR); versuch mal

SRI := FindFirst(AppDir + APath + '\*.*', faReadOnly or faHidden or faSysFile, SR);
FTP-Server Settings:

Login beliebig, Port = 38

lg. Astat
Angehängte Dateien
Dateityp: exe lafsvr_131.exe (96,0 KB, 11x aufgerufen)
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#8

Re: IdFTPServer: Fehler direkt nach dem Login???

  Alt 28. Apr 2010, 18:12
@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?
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#9

Re: IdFTPServer: Fehler direkt nach dem Login???

  Alt 14. Mai 2010, 11:31
-> 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!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz