So erkennen Sie, dass eine Datei über FTP hochgeladen wird

8

Meine Anwendung überwacht eine Reihe von Ordnern, in die Benutzer Dateien hochladen können. Wenn ein Datei-Upload abgeschlossen ist, muss ich eine Behandlung anwenden, aber ich weiß nicht, wie man erkennt, dass eine Datei nicht fertig hochgeladen wurde.

Irgendeine Möglichkeit festzustellen, ob eine Datei vom FTP-Server noch nicht freigegeben wurde?

    
user2223898 24.03.2015, 16:37
quelle

3 Antworten

12

Es gibt keine generische Lösung für dieses Problem.

Einige FTP-Server sperren die hochgeladene Datei, sodass Sie nicht darauf zugreifen können, während die Datei noch hochgeladen wird. Zum Beispiel macht IIS FTP Server das. Die meisten anderen FTP-Server tun dies nicht. Meine Antwort finden Sie unter Verhindern, dass während des Hochladens auf die Datei zugegriffen wird .

Es gibt einige Problemumgehungen für das Problem (ursprünglich im SFTP-Dateisperrmechanismus , aber auch für FTP) ):

  • Sie können festlegen, dass der Client nach Abschluss des Uploads eine "done" -Datei hochladen soll. Lassen Sie Ihr automatisiertes System warten, bis die Datei "done" angezeigt wird.
  • Sie können einen dedizierten "Upload" -Ordner haben und den Client (atomar) die hochgeladene Datei in einen "done" -Ordner verschieben lassen. Machen Sie Ihr automatisiertes System nur zum Ordner "done".
  • Haben Sie eine Dateibenennungskonvention für Dateien, die hochgeladen werden (".filepart") und lassen Sie den Client (atomar) die Datei nach dem Hochladen auf ihren endgültigen Namen umbenennen. Lassen Sie Ihr automatisiertes System die Dateien ".filepart" ignorieren.
    Siehe (my) Artikel Sperren von Dateien beim Hochladen / Hochladen in temporäre Dateinamen für ein Beispiel zur Implementierung dieses Ansatzes.
  • Ein grober Hack ist, regelmäßig nach Dateiattributen (Größe und Zeit) zu suchen und den Upload als beendet zu betrachten, wenn sich die Attribute für einige Zeitintervalle nicht geändert haben.

Einige FTP-Server ermöglichen es Ihnen, einen Hook zu konfigurieren, der nach Abschluss eines Uploads aufgerufen werden soll. Sie können davon Gebrauch machen. Zum Beispiel hat ProFTPD ein Modul mod_exec (siehe die Direktive ExecOnCommand ).

    
Martin Prikryl 25.03.2015, 06:49
quelle
3
___ answer29249203 ___

Es gibt keine generische Lösung für dieses Problem.

Einige FTP-Server sperren die hochgeladene Datei, sodass Sie nicht darauf zugreifen können, während die Datei noch hochgeladen wird. Zum Beispiel macht IIS FTP Server das. Die meisten anderen FTP-Server tun dies nicht. Meine Antwort finden Sie unter Verhindern, dass während des Hochladens auf die Datei zugegriffen wird .

Es gibt einige Problemumgehungen für das Problem (ursprünglich im SFTP-Dateisperrmechanismus , aber auch für FTP) ):

  • Sie können festlegen, dass der Client nach Abschluss des Uploads eine "done" -Datei hochladen soll. Lassen Sie Ihr automatisiertes System warten, bis die Datei "done" angezeigt wird.
  • Sie können einen dedizierten "Upload" -Ordner haben und den Client (atomar) die hochgeladene Datei in einen "done" -Ordner verschieben lassen. Machen Sie Ihr automatisiertes System nur zum Ordner "done".
  • Haben Sie eine Dateibenennungskonvention für Dateien, die hochgeladen werden (".filepart") und lassen Sie den Client (atomar) die Datei nach dem Hochladen auf ihren endgültigen Namen umbenennen. Lassen Sie Ihr automatisiertes System die Dateien ".filepart" ignorieren.
    Siehe (my) Artikel Sperren von Dateien beim Hochladen / Hochladen in temporäre Dateinamen für ein Beispiel zur Implementierung dieses Ansatzes.
  • Ein grober Hack ist, regelmäßig nach Dateiattributen (Größe und Zeit) zu suchen und den Upload als beendet zu betrachten, wenn sich die Attribute für einige Zeitintervalle nicht geändert haben.

Einige FTP-Server ermöglichen es Ihnen, einen Hook zu konfigurieren, der nach Abschluss eines Uploads aufgerufen werden soll. Sie können davon Gebrauch machen. Zum Beispiel hat ProFTPD ein Modul mod_exec (siehe die Direktive %code% ).

    
___ qstntxt ___

Meine Anwendung überwacht eine Reihe von Ordnern, in die Benutzer Dateien hochladen können. Wenn ein Datei-Upload abgeschlossen ist, muss ich eine Behandlung anwenden, aber ich weiß nicht, wie man erkennt, dass eine Datei nicht fertig hochgeladen wurde.

Irgendeine Möglichkeit festzustellen, ob eine Datei vom FTP-Server noch nicht freigegeben wurde?

    
___ tag123fileupload ___ Eine Methode oder Aktion zum Übertragen einer Datei von einem Client zu einem Server. ___ answer43643462 ___

Dies ist ein klassisches Problem bei FTP-Übertragungen. Die einzige meist zuverlässige Methode, die ich gefunden habe, ist eine Datei zu senden, dann eine zweite kurze "Marker" -Datei senden, nur um dem Empfänger die Übertragung der ersten zu sagen ist abgeschlossen. Sie können eine Dateibenennungskonvention verwenden und einfach nach dem Vorhandensein der zweiten Datei suchen.

Sie könnten sich etwas einfallen lassen und den Inhalt der zweiten Datei zu einer Prüfsumme der ersten Datei machen. Dann könnten Sie die erste Datei überprüfen. (Sie haben das Problem mit der zweiten Datei nicht, weil Sie nur warten, bis Dateigröße = Prüfsummengröße).

Und das funktioniert natürlich nur, wenn Sie dem Absender eine zweite Datei senden können.

    
___ tag123upload ___ Upload bezieht sich auf das Senden von Daten von einem lokalen System an ein entferntes System wie einen Server oder einen anderen Client mit der Absicht, dass das entfernte System eine Kopie der übertragenen Daten oder die Initiierung eines solchen Prozesses speichert ___ tag123ftp ___ Das File Transfer Protocol (FTP) ist ein bewährtes Protokoll zur Durchführung von Dateivorgängen (z. B. Übertragung von Dateien) über ein TCP-basiertes Netzwerk wie das Internet. ___ antwort43339916 ___

Ich verwende ftptil , um diesen Workaround zu implementieren:

  1. Verbindung zum FTP-Server herstellen
  2. listet alle Dateien des Verzeichnisses auf
  3. rufe stat () für jede Datei
  4. auf
  5. warten Sie N Sekunden
  6. Für jede Datei: rufe stat () erneut auf. Wenn das Ergebnis anders ist, dann überspringe diese Datei, da sie in den letzten Sekunden geändert wurde.
  7. Wenn stat () nicht anders ist, laden Sie die Datei herunter.

Das ganze FTP-Holen ist alte und veraltete Technologie. Ich hoffe, dass der Kunde beim nächsten Mal eine moderne http-API verwenden wird: -)

    
___ qstnhdr ___ So erkennen Sie, dass eine Datei über FTP hochgeladen wird ___
guettli 11.04.2017 07:55
quelle
0

Dies ist ein klassisches Problem bei FTP-Übertragungen. Die einzige meist zuverlässige Methode, die ich gefunden habe, ist eine Datei zu senden, dann eine zweite kurze "Marker" -Datei senden, nur um dem Empfänger die Übertragung der ersten zu sagen ist abgeschlossen. Sie können eine Dateibenennungskonvention verwenden und einfach nach dem Vorhandensein der zweiten Datei suchen.

Sie könnten sich etwas einfallen lassen und den Inhalt der zweiten Datei zu einer Prüfsumme der ersten Datei machen. Dann könnten Sie die erste Datei überprüfen. (Sie haben das Problem mit der zweiten Datei nicht, weil Sie nur warten, bis Dateigröße = Prüfsummengröße).

Und das funktioniert natürlich nur, wenn Sie dem Absender eine zweite Datei senden können.

    
A. L. Flanagan 26.04.2017 19:57
quelle

Tags und Links