Einzelnen Beitrag anzeigen

torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Leere Datei auf Server nach Upload mit idFtp.Put -> Warum?

  Alt 22. Aug 2011, 16:28
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;
Danke
Tom
  Mit Zitat antworten Zitat