FTP Upload

  • Hallo, ich habe auf meinem Desktop eine Datei, die sich alle 5 Minuten aktualisiert, diese soll alle 15 Minuten auf meinen FTP Server hochgeladen werden.
    Daten:
    Server: test.mymabbo.org
    Benutzername: test234
    Passwort: WIRD HIER NICHT ANGEGEBEN :D
    Port: 21

    Der Name der Datei lautet config.html


    Wie macht man soetwas? Bitte ein vollständiges Script posten, da ich etwa 1 Jahr nichtmehr mit AutoIt gearbeitet habe.
    Danke im Vorraus!

    Einmal editiert, zuletzt von Spielie (19. Oktober 2012 um 23:16)

  • Hi,

    auch wenn eigentlich die Hilfe (mit den erforderlichen Grundlagen) ausreichen sollte und du den Code verstehen solltest,
    hier mal ein ungetestetes Beispiel:

    Beispiel
    [autoit]

    #include <FTPEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #region Settings
    Const $sServer = 'test.mymabbo.org' ; Servername
    Const $sUser = 'test234' ; Benutzername
    Const $sPassword = 'x' ; Passwort des Benutzers
    Const $sLocalFile = @ScriptDir & '\Beispiel.dat' ; Lokale Datei, die hochgeladen werden soll
    Const $sRemoteFile = 'Beispiel.dat' ; Datei auf dem Server
    #endregion

    [/autoit] [autoit][/autoit] [autoit]

    Global $hFTP_Open, $hFTP_Connect

    [/autoit] [autoit][/autoit] [autoit]

    _StartLoop(15)

    [/autoit] [autoit][/autoit] [autoit]

    Func _StartLoop($iMin)
    Local $iMS, $iCounter = 1
    $iMS = $iMin * 60 * 1000 ; rechnet Min in MS um
    while FileExists($sLocalFile) ; Vorgang wird solange wie Datei existiert ausgeführt -> Endlosschleife
    _LogIn($sServer, $sUser, $sPassword) ; Loginvorgang
    If $hFTP_Connect = 0 Then
    MsgBox(16, 'Fehler', 'Benutzerdaten überprüfen, konnte keine Verbindung zum Server herstellen.')
    EndIf
    _FTP_FilePut($hFTP_Connect, $sLocalFile, $sRemoteFile) ; Datei $sLocalFile hochladen
    If @error Then
    MsgBox(16, 'Fehler', 'Fehler beim Upload der Datei.')
    Else
    MsgBox(64, 'Info', 'Datei erfolgreich hochgeladen (zum ' & $iCounter & '. Mal).')
    EndIf
    $iCounter = $iCounter + 1 ; optionaler Counter
    _FTP_Close($hFTP_Open)
    Sleep($iMS) ; wartet 15 Minuten
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _LogIn($sServer, $sUser, $sPassword)
    $hFTP_Open = _FTP_Open('FTP1')
    $hFTP_Connect = _FTP_Connect($hFTP_Open, $sServer, $sUser, $sPassword)
    Return $hFTP_Connect
    EndFunc

    [/autoit]
  • #include Const $sServer = 'test.mymabbo.org' ; Servername Const $sUser = 'test234' ; Benutzername Const $sPassword = 'x' ; Passwort des Benutzers Const $sLocalFile = @ScriptDir & '\Beispiel.dat' ; Lokale Datei, die hochgeladen werden soll Const $sRemoteFile = 'Beispiel.dat' ; Datei auf dem Server _StartLoop(15) Func _StartLoop($iMin) Local $hConnection, $iMS, $iCounter = 1 $iMS = $iMin * 60 * 1000 while FileExists($sLocalFile) $hConnection = _LogIn($sServer, $sUser, $sPassword) ; Loginvorgang If $hConnection = 0 Then MsgBox(16, 'Fehler', 'Benutzerdaten überprüfen, konnte keine Verbindung zum Server herstellen.') EndIf _FTP_FilePut($hConnection, $sLocalFile, $sRemoteFile) ; Datei $sLocalFile hochladen If @error Then MsgBox(16, 'Fehler', 'Fehler beim Upload der Datei.') Else MsgBox(64, 'Info', 'Datei erfolgreich hochgeladen (zum ' & $iCounter & '. Mal).') EndIf $iCounter = $iCounter + 1 Sleep($iMS) ; wartet 15 Minuten WEnd EndFunc Func _LogIn($sServer, $sUser, $sPassword) Local $hFTP_Open, $hFTP_Connect $hFTP_Open = _FTP_Open('FTP') $hFTP_Connect = _FTP_Connect($hFTP_Open, $sServer, $sUser, $sPassword) Return $hFTP_Connect EndFunc


    Funktioniert, danke dir!

  • denke da sollte noch ein _FTP_Close in die Schleife, sonst öffnet man doch ewig FTP-Sitzungen ?!?


    Noch besser den Login vor die Schleife und wie sollte dieses Skript bisher eigentllch beendet werden?

    Spoiler anzeigen
    [autoit]

    #include <FTPEx.au3>
    HotKeySet("{ESC}", "Terminate")

    [/autoit] [autoit][/autoit] [autoit]

    Const $sServer = 'test.mymabbo.org' ; Servername
    Const $sUser = 'test234' ; Benutzername
    Const $sPassword = 'x' ; Passwort des Benutzers
    Const $sLocalFile = @ScriptDir & '\Beispiel.dat' ; Lokale Datei, die hochgeladen werden soll
    Const $sRemoteFile = 'Beispiel.dat' ; Datei auf dem Server
    Global $hFTP_Open, $hConnection = _LogIn($sServer, $sUser, $sPassword) ; Loginvorgang

    [/autoit] [autoit][/autoit] [autoit]

    _StartLoop(15)

    [/autoit] [autoit][/autoit] [autoit]

    Func _StartLoop($iMin)
    Local $hConnection, $iMS, $iCounter = 1
    $iMS = $iMin * 60 * 1000
    while FileExists($sLocalFile)
    $hConnection = _LogIn($sServer, $sUser, $sPassword) ; Loginvorgang
    If $hConnection = 0 Then
    MsgBox(16, 'Fehler', 'Benutzerdaten überprüfen, konnte keine Verbindung zum Server herstellen.')
    EndIf
    _FTP_FilePut($hConnection, $sLocalFile, $sRemoteFile) ; Datei $sLocalFile hochladen
    If @error Then
    MsgBox(16, 'Fehler', 'Fehler beim Upload der Datei.')
    Else
    MsgBox(64, 'Info', 'Datei erfolgreich hochgeladen (zum ' & $iCounter & '. Mal).')
    EndIf
    $iCounter = $iCounter + 1
    Sleep($iMS) ; wartet 15 Minuten
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _LogIn($sServer, $sUser, $sPassword)
    Local $hFTP_Connect
    $hFTP_Open = _FTP_Open('FTP')
    $hFTP_Connect = _FTP_Connect($hFTP_Open, $sServer, $sUser, $sPassword)
    Return $hFTP_Connect
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Terminate()
    _FTP_Close($hFTP_Open)
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    mfg autoBert

  • Torni:

    Stimmt, vor Sleep sollte noch _FTP_Close, das habe ich vergessen...

    autoBert:

    Soweit ich den TE verstanden habe gibt's keine Abbruchbedingung.
    Ich weiß nicht, ob man den Login wirklich nur vor die Schleife setzen kann, da ja auch irgendwann ein Timeout eintritt, oder?
    Von daher dachte ich, dass man die Verbindung stabil halten sollte.

  • Ich weiß nicht, ob man den Login wirklich nur vor die Schleife setzen kann, da ja auch irgendwann ein Timeout eintritt, oder?

    Stimmt an eine evtl. Zwangstrennung durch den FTP-Server wegen Inaktivität habe ich nicht gedacht. Deshlb jetzt Login bei Bedarf:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    #include <FTPEx.au3>
    ;HotKeySet("{ESC}", "Terminate") nur falls der Benutzer das Skript abbreche können soll
    OnAutoItExitRegister("Terminate")

    [/autoit] [autoit][/autoit] [autoit]

    Const $sServer = 'test.mymabbo.org' ; Servername
    Const $sUser = 'test234' ; Benutzername
    Const $sPassword = 'x' ; Passwort des Benutzers
    Const $sLocalFile = @ScriptDir & '\Beispiel.dat' ; Lokale Datei, die hochgeladen werden soll
    Const $sRemoteFile = 'Beispiel.dat' ; Datei auf dem Server
    Global $hFTP_Open, $hConnection = _LogIn($sServer, $sUser, $sPassword) ; Loginvorgang

    [/autoit] [autoit][/autoit] [autoit]

    _StartLoop(15)

    [/autoit] [autoit][/autoit] [autoit]

    Func _StartLoop($iMin)
    Local $hConnection, $iMS, $iCounter = 1
    $iMS = $iMin * 60 * 1000
    While FileExists($sLocalFile)
    If $hFTP_Open = 0 Then
    ; Loginvorgang beim 1. Mal und später nach einer Zwangstrennung => ergibt Fehler bei FilePut
    $hConnection = _LogIn($sServer, $sUser, $sPassword)
    EndIf
    _FTP_FilePut($hConnection, $sLocalFile, $sRemoteFile) ; Datei $sLocalFile hochladen
    If @error Then
    MsgBox(16, 'Fehler', 'Fehler beim Upload der Datei.')
    Terminate()
    $hFTP_Open = 0
    Else
    MsgBox(64, 'Info', 'Datei erfolgreich hochgeladen (zum ' & $iCounter & '. Mal).')
    $iCounter += 1
    EndIf
    Sleep($iMS) ; wartet 15 Minuten
    WEnd
    EndFunc ;==>_StartLoop

    [/autoit] [autoit][/autoit] [autoit]

    Func _LogIn($sServer, $sUser, $sPassword)
    Local $hFTP_Connect
    $hFTP_Open = _FTP_Open('FTP')
    $hFTP_Connect = _FTP_Connect($hFTP_Open, $sServer, $sUser, $sPassword)
    If @error Then
    MsgBox(16, 'Fehler', 'Benutzerdaten überprüfen, konnte keine Verbindung zum Server herstellen.')
    Exit
    Else
    Return $hFTP_Connect
    EndIf
    EndFunc ;==>_LogIn

    [/autoit] [autoit][/autoit] [autoit]

    Func Terminate()
    _FTP_Close($hFTP_Open)
    Exit
    EndFunc ;==>Terminate

    [/autoit]

    mfg autoBert