AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Leere Datei auf Server nach Upload mit idFtp.Put -> Warum?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von torud · begonnen am 22. Aug 2011 · letzter Beitrag vom 22. Aug 2011
Antwort Antwort
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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 22. Aug 2011, 16:32
Was mich stutzig macht sind die Zugriffe auf VCL-Controls(Form1). Du solltest diese dringend synchronisieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 22. Aug 2011, 16:40
Man könnte notfalls auch nochmal die Dateigröße prüfen, nach dem Übertragen und dann entweder einen Fehler werfen oder eventuell es erst nocheinmal versuchen zu übertragen.

Das FTP-Protokoll hat keine (gute) Fehlererkennung.
$2B or not $2B
  Mit Zitat antworten Zitat
torud

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

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

  Alt 22. Aug 2011, 16:43
Hallo Detlef,

danke für Deine Info. Ist mein erster Thread und ich weiss noch nicht soo genau, wie das mit dem Synchronisieren läuft.

Sind denn sonst noch grobe Fehler drin?
Könnte es Sinn machen einen Timeout zu setzen?

Kann es denn so, wie ich es mit dem isBusy gemacht habe überhaupt funktionieren? Ich frage nur, weil der Thread sich ja selbst killt und ich mir nicht sicher bin, dass wenn in der Zwischenzeit der Aufruf nochmals kommt der Thread das überhaupt mitbekommt? Das war mehr oder weniger ein Not-Versuch mehrfaches Hochladen auf einmal zu vermeiden.
Danke
Tom
  Mit Zitat antworten Zitat
torud

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

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

  Alt 22. Aug 2011, 16:45
Man könnte notfalls auch nochmal die Dateigröße prüfen, nach dem Übertragen und dann entweder einen Fehler werfen oder eventuell es erst nocheinmal versuchen zu übertragen.

Das FTP-Protokoll hat keine (gute) Fehlererkennung.
Jo, vielleicht ist das eine Idee.

Das Verrückte ist ja, dass die User nichtmal eine Fehlermeldung erhalten. Die Verbindung wird etabliert und dann erhalten sie in dem Label die Anzeige, dass die Datei hochgeladen wurde.
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 22. Aug 2011, 16:49
Abgesehen davon, dass FTP u.U. doppelt freigegeben wird (erst im Except- dann im Finally-Block) und die VCL-Zugriffe nicht synchronisiert sind, ist mir spontan nichts aufgefallen. Aber die angesprochenen Dinge können es schon in sich haben, auch wenn sie für das Kernproblem vermutlich nicht ursächlich sind.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#7

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

  Alt 22. Aug 2011, 17:22
Ich werfe (als eher unwahrscheinliche Ursache) noch den TransferType ins Spiel.
Default ist IMHO ftBinary, die Alternative ftASCII würde sich "eigentlich" für XML anbieten. Wobei ich nicht glaube, daß es daran liegt -> wenn, dann entstehen Probleme andersrum (Binärdateien im ASCII-Mode transferiert).

Gruss,
blauweiss
  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 08:20 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