Hallo,
mein Problem ist, denke ich mal nur ein kleines. Der IdFTPServer funktioniert soweit Problemlos bis auf folgende Fehler:
1. Per
FTP Clienten kann man maximal zwei Dateien gleichzeitig hochladen bei 30Dateien kein Problem. Werden jedoch 4 gleichzeitig im
FTP Client eingestellt bringt jede 7-8 Datei ein Upload Fehler. Der Fehler zeigt, dass der Server nicht erreichbar sei.
Delphi-Quellcode:
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;
2. Unter FileZilla (Linux/Windows) sowie PHP
FTP kann man auf dem Server neue Verzeichnisse erstellen. Dabei wird nachfolgende Funktion aufgerufen. Bei cuteFTP hingegen kann der Ordner nicht erstellt werden obwohl es keine Fehlermeldung gibt sondern ein "Ordner wurde erstellt". Auch wird die Funktion des idFTPServers gar nicht erst aufgerufen hab dort ein ShowMessage als Kontrolle eingebaut gehabt.
Die Einstellungen sind jedoch wie FileZilla gesetzt. Mein Bedenken nun, dass auch andere
FTP Clienten nicht gehen, wenn ich den
FTP Server bereitstelle. Gibt es in IdFTPServer noch eine andere Möglichkeit, einen ordner zu erstellen?
Delphi-Quellcode:
procedure TForm1.IdFTPServer1MakeDirectory(ASender: TIdFTPServerContext;
var VDirectory:
string);
begin
if not DirectoryExists(ReplaceChars(AppDir + VDirectory))
then
if not CreateDir(ReplaceChars(AppDir + VDirectory))
then
begin
Raise Exception.Create('
Unable to create directory');
end;
end;
3. So dritter und letzter Fehler. Dateien hochladen geht ja problemlos, sei es nun mal mit den maximal 2Dateien gleichzeitig außer acht gelassen. Nur das Problem sind die Verzeichnisse. Lade ich nun einen Ordner mit Dateien darin hoch geht es nicht, da er kein Ordner erstellt egal ob Filezilla (Linux/Windows) etc. Er will also alle Dateien hochladen ohne vorher zu prüfen ob nicht erst ein Ordner angelegt werden muss. Meine Idee nun, dass ich bei IdFTPServer1StoreFile die Variable AFilename zerlege und den Dateinamen am Ende lösch und den Pfad als AFoldername speicher und dann überprüf, ob der Ordner vorhanden ist, wenn nicht dann erstellen. Nur wie kann ich den String zerlegen so dass ich nur den Pfad ohne Datei bekomm?
C:\ftpverzeichnis\subfolder\datei1.test
C:\ftpverzeichnis\subfolder\datei2
Also die Dateien haben auch mal keine Endung.
Wäre echt super, wenn mir jemand bei 2. und 3. eine Lösung nennen könnte und perfekt, wenn auch 1. irgendwie zu lösen wäre. *G*