Hallo Wissende,
mit folgendem Code schiebe ich Dateien auf einen Server im Internet.
Verrückterweise funktioniert das auf meinem System immer wunderbar. Sobald User, die "nur" einen Webstick haben, das versuchen, kann es vorkommen, dass die Datei auf dem Server leer ankommt. Also nicht nur ein bisschen was, sondern komplett leer. Die Dateien sind
XML-Dateien, die max 8kb haben.
Kann es sein, dass die Verbindung zu langsam ist und hier ein Timeout zum Tragen kommt? Ich bin ziemlich ratlos. Am Anfang war es Norton, der uns blockiert hat, später stellte sich noch die WindowsFirewall in den Weg. Jetzt wo eigentlich alles funktionieren müsste, kommt es immer wieder vor, dass User 0-byte-Dateien hochladen.
Vielleicht hat sich ja auch ein Fehler in die Routine eingeschlichen? Achso, das Ganz ist als Thread gemacht. Wenn ich den Code hier einstellen soll, mach ich das gern.
Delphi-Quellcode:
procedure TXMLUploader.Execute;
var
Ftp : TIdFTP;
begin
if bIsBusy
then exit;
try
if FileExists(FileName)
then
begin
Ftp := TIdFTP.Create(
nil);
Ftp.Host := '
myserver';
Ftp.Username := '
myuser';
Ftp.Password := '
mypassword';
Ftp.Port := 21;
Ftp.Connect;
try
Ftp.Login;
FTP.ChangeDir('
html/services/football/ekstraklasa/cis/xml');
try
bIsBusy := True;
FTP.Put(FileName, ExtractFileName(FileName));
form1.lbl_status.Font.Color := clGreen;
form1.lbl_status.Caption := DateTimeToStr(now) + '
Upload of current Statistics-File was succesful!';
bIsBusy := False;
except
on e:
exception do begin
form1.lbl_status.Font.Color := clRed;
form1.lbl_status.Caption := DateTimeToStr(now) + '
Can´t upload current Statistics-File!';
if Ftp <>
nil then Ftp.Free;
form1.mem_debug.Lines.Add(e.
Message);
bIsBusy := False;
end;
end;
finally
Ftp.Disconnect;
Ftp.Free;
bIsBusy := False;
end;
end;
except
on e:
exception do begin
form1.lbl_status.Font.Color := clRed;
form1.lbl_status.Caption := DateTimeToStr(now) + '
Can´t connect to server!';
if Ftp <>
nil then Ftp.Free;
end;
end;
end;