FTP Upload geht nur sporadisch

  • hi
    ich mache mir gerade ein tool, welches prüft ob TXT dateien bei mir lokal liegen und die dann auf nen FTP pumpen
    leider klappt das nicht immer
    manchmal werden nur 1 datei hochgeladen. manchmal garnix
    vielleicht wisst ihr ja woran es liegen könnte?
    Habe es auch schon mit aktiv und passiv FTP Probiert

    Und noch ne frage, gibt es eine möglichkeit dem FTP zu sagen, das er nur die daten hohladen soll wenn der dateiname noch nicht auf dem FTP vorhanden ist??


    [autoit]

    #include <File.au3>
    #include <Array.au3>
    #include <FTPEx.au3>

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

    ;lädt eine Datei hoch
    Local $s_ServerName = '***.funpic.de' ;
    Local $s_Username = ""
    Local $s_Password = ""

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

    Local $i_Passive = 1
    Local $l_InternetSession, $l_FTPSession, $errOpen, $errFTP

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

    $aFilelist = _FileListToArray(@DesktopDir)

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

    ;Datei suche
    For $i = 1 To $aFilelist[0]
    $ext = StringRight($aFilelist[$i], 4)
    ;abfrage nach doppelten namen in liste
    If $ext == ".txt" Then
    $l_InternetSession = _FTP_Open('AuoItZilla') ;Öffnet eine FTP Sitzung
    $errOpen = @error
    If Not @error Then
    $l_FTPSession = _FTP_Connect($l_InternetSession, $s_ServerName, $s_Username, $s_Password, $i_Passive) ;Verbindet zu einem FTP Server
    $errFTP = @error
    If Not @error Then
    If _FTP_FilePut($l_FTPSession, $aFilelist[$i], "/" & $aFilelist[$i]) Then
    ConsoleWrite("Upload: erfolgreich" & @CRLF)
    Else
    ConsoleWrite("Upload: fehlgeschlagen " & " " & @error & @CRLF)
    EndIf
    Else
    MsgBox(0, "Connect", "fehlgeschlagen")
    ConsoleWrite("Connect: " & " " & $errFTP & @CRLF)
    EndIf
    Else
    MsgBox(0, "Open", "fehlgeschlagen")
    ConsoleWrite("Open " & " " & $errOpen & @CRLF)
    EndIf
    _FTP_Close($l_InternetSession) ;schliesst die FTP-Sitzung

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

    MsgBox(0, 'Test', $aFilelist[$i])
    EndIf
    Next

    [/autoit]
    • Offizieller Beitrag

    Heyho,

    Ein Mögliches Problem könnte sein, dass du immer wieder eine neue Verbindung öffnest und wieder schließt, wieso? ;) Ich würde am Anfang eine FTP Session öffnen und dann zum Server connecten und dann in der For schleife die Dateien übertragen und ganz zum schluss wieder die Verbindung beenden. Ich schätze mal, dass Funpic nur ne gewisse Anzahl von connects pro Minute zulässt.

    Zu deiner zweiten Frage: Du könntest mit _FTP_ListToArray dir eine Liste ausgeben von den Dateien die schon auf dem FTP Server sind und dann gucken, ob der Dateiname schon existiert ;)

    Gruß
    Spider

  • also habs nun abgeändert
    jedoch imemrnoch das problem das nur eine jpg anstatt alle 3 in dem ordner hochgeladen werden

    [autoit]


    Local $i_Passive = 0
    Local $l_InternetSession, $l_FTPSession, $errOpen, $errFTP

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

    $aFilelist = _FileListToArray("C:\uninst")
    $l_InternetSession = _FTP_Open('AuoItZilla') ;Öffnet eine FTP Sitzung
    $errOpen = @error

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

    ;Datei suche
    For $i = 1 To $aFilelist[0]
    $ext = StringRight($aFilelist[$i], 4)

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

    If $ext == ".jpg" Then

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

    If Not @error Then
    $l_FTPSession = _FTP_Connect($l_InternetSession, $s_ServerName, $s_Username, $s_Password, $i_Passive) ;Verbindet zu einem FTP Server
    $errFTP = @error
    If Not @error Then
    If _FTP_FilePut($l_FTPSession, $aFilelist[$i], '/' & $aFilelist[$i]) Then
    ConsoleWrite("Upload: erfolgreich" & @CRLF)
    Else
    ConsoleWrite("Upload: fehlgeschlagen " & " " & @error & @CRLF)
    EndIf
    Else
    MsgBox(0, "Connect", "fehlgeschlagen")
    ConsoleWrite("Connect: " & " " & $errFTP & @CRLF)
    EndIf
    Else
    MsgBox(0, "Open", "fehlgeschlagen")
    ConsoleWrite("Open " & " " & $errOpen & @CRLF)
    EndIf

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

    ;MsgBox(0, 'Test', $aFilelist[$i])
    EndIf
    Next

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

    _FTP_Close($l_InternetSession) ;schliesst die FTP-Sitzung

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]
    • Offizieller Beitrag

    Hallo,

    ich meinte es eher so:

    Spoiler anzeigen
    [autoit]

    Local $i_Passive = 0
    Local $l_InternetSession, $l_FTPSession, $errOpen, $errFTP

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

    $aFilelist = _FileListToArray("C:\uninst")
    $l_InternetSession = _FTP_Open('AuoItZilla') ;Öffnet eine FTP Sitzung
    $errOpen = @error
    $l_FTPSession = _FTP_Connect($l_InternetSession, $s_ServerName, $s_Username, $s_Password, $i_Passive) ;Verbindet zu einem FTP Server
    If @error Then Exit MsgBox(16,"","ERROR beim connecten "&@error)

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

    ;Datei suche
    For $i = 1 To $aFilelist[0]
    $ext = StringRight($aFilelist[$i], 4)

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

    If $ext == ".jpg" Then
    If _FTP_FilePut($l_FTPSession, $aFilelist[$i], '/' & $aFilelist[$i]) Then
    ConsoleWrite("Upload: erfolgreich" & @CRLF)
    Else
    ConsoleWrite("Upload: fehlgeschlagen " & " " & @error & @CRLF)
    EndIf
    EndIf
    Next

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

    _FTP_Close($l_InternetSession) ;schliesst die FTP-Sitzung

    [/autoit]

    Gruß
    Spider

  • so muss das sein, sonst erkennt er den local pfad nicht

    Spoiler anzeigen

    For $i = 1 To $aFilelist[0]
    $ext = StringRight($aFilelist[$i], 4)

    ConsoleWrite(" Datei: " & $aFilelist[$i])
    If $ext == ".jpg" Then
    If _FTP_FilePut($l_FTPSession, "C:\temp\" & $aFilelist[$i], $aFilelist[$i]) Then
    ConsoleWrite(" Upload: erfolgreich" & @CRLF)
    Else
    ConsoleWrite(" Upload: fehlgeschlagen " & " " & @error & @CRLF)
    EndIf
    EndIf
    Next

    2 Mal editiert, zuletzt von cobain86 (22. Juli 2011 um 10:00)

  • [autoit]

    For $i = 1 To $aFilelist[0]
    $ext = StringRight($aFilelist[$i], 4)

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

    ConsoleWrite(" Datei: " & $aFilelist[$i])
    If $ext == ".jpg" Then
    If _FTP_FilePut($l_FTPSession, "C:\temp\" & $aFilelist[$i], $aFilelist[$i]) Then
    ConsoleWrite(" Upload: erfolgreich" & @CRLF)
    Else
    ConsoleWrite(" Upload: fehlgeschlagen " & " " & @error & @CRLF)
    EndIf
    EndIf
    Next

    [/autoit]


    Du prüfst auf die Dateiendung Case Sensitive, wenn die Datei mit .JPG endet, wird sie nicht hochgeladen. Ich denke bei einer Dateiendung reicht auch

    [autoit]

    If $ext = ".jpg" Then

    [/autoit]
  • soweit klappt alles
    nur ein problem habe ich
    wenn ich das programm als 32bit compiliere geht es einfach nicht mehr

    er bleibt beim ftp upload hängen

    Spoiler anzeigen

    If $ext = ".jpg" Then
    ConsoleWrite(" Datei: " & $aFilelist[$i])
    If _FTP_FilePut($l_FTPSession, $aFilelist[$i], $aFilelist[$i]) Then
    ConsoleWrite(" Upload: erfolgreich" & @CRLF)

    der erste console write kommt noch, dann is schluss.

    ok für x32 muss man den passive mode nutzen, sonst gehts nicht!

    5 Mal editiert, zuletzt von cobain86 (22. Juli 2011 um 12:10)