Upload Problem mit mehreren Files

  • Ich habe ein kleines Problem an dem ich hängen geblieben bin..

    Und zwar habe ich ein Programm, mit dem man eine Datei oder mehrere Dateien hochladen kann.

    Jenachdem ob man anhakt "eine hochladen" oder "mehrere" hochladen wird entsprechend verfahren.

    Jetzt hab ich aber das Problem das der beim hochladen mehrerer Files nur die erste hochläd, alle weiteren jedoch nicht.

    Wenn ich nach und nach einzelne hochlade geht dies einwandfrei.

    Hier mal etwas Code:

    [autoit]


    Func _send()

    ;search for sub dir
    $server_path = GUICtrlRead( $input_server )
    $slash_pos = StringInStr( $server_path, "/" )

    If $slash_pos = 0 Then
    $slash_pos = StringLen( $server_path )
    $just_server =StringLeft( $server_path, $slash_pos )
    Else
    $just_server =StringLeft( $server_path, $slash_pos - 1 )
    EndIf

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

    $ext_path = StringTrimLeft( $server_path, $slash_pos )
    If Not $ext_path = "" then $ext_path &= "/"

    $ftp_con = _FTPOpen( "ftp_con" )
    $con = _FTPConnect( $ftp_con, $just_server, GUICtrlRead( $input_user ), GUICtrlRead( $input_pw ) )

    If GUICtrlRead( $multiple_upload ) = 4 then
    ; Ein Single Upload
    _PathSplit( GUICtrlRead( $input_single_file ), $drive, $dir, $name, $ext )
    $ftp = _FtpPutFile( $con, GUICtrlRead( $input_single_file ), "/" & $ext_path & $name & $ext )
    If $ftp = 1 Then GUICtrlSetData( $input_single_file, "" )
    Else;If GUICtrlRead( $multiple_upload ) = 1 And $upload = True then
    ; Ist ein Multi Upload
    $multi_files = GuiCtrlRead( $input_multiple_files )
    $array_multi_files = StringSplit( $multi_files, @CR )
    Dim $part_send = "", $all_send = ""
    For $act_file = 1 To UBound( $array_multi_files ) - 2
    _PathSplit( $array_multi_files[ $act_file ], $drive, $dir, $name, $ext )
    ;~ ConsoleWrite( $array_multi_files[ $act_file ] & " auf " & "/" & $ext_path & $name & $ext & @CRLF )
    $ftp = _FtpPutFile( $con, $array_multi_files[ $act_file ], "/" & $ext_path & $name & $ext )
    ;~ ConsoleWrite( "Server:"&$just_server & " ,User:"&GUICtrlRead( $input_user ) & " ,Pw:"&GUICtrlRead( $input_pw ) & @CRLF )
    ;~ ConsoleWrite( "ftp://" & GUICtrlRead( $input_user ) & ":" & GUICtrlRead( $input_pw ) & "@" & $just_server & "/" & $ext_path & $name & $ext & @CRLF )
    ;~ ConsoleWrite( "FTP:"&$ftp & " ,Con:" &$con & " ,open:"&$ftp_con & " ,part_send:"&$part_send & " ,all_send:"&$all_send & " ,act_file:"&$act_file & @CRLF )
    Next

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

    $ftp_close = _FTPClose( $ftp_con )
    EndFunc

    [/autoit]


    ( Hab ich ein wenig gekürzt )

    Jmd ne Idee? :S

  • Hallo hundi,

    ich habe das Prob mit:

    [autoit]


    Func upload()
    $FTP = _FTPOpen("AutoIt v3")
    $FTPServer = _FTPConnect($FTP,$serv,$user,$pass,1)
    ProgressOn("Upload","Uploading Multi-Files ...")
    $x = _FTP_UploadProgress($FTPServer, "C:\Datei1.cfg", 'Datei1.cfg', "_UpdateParts") & _FTP_UploadProgress($FTPServer, "C:\Datei2.cfg", 'Datei2.cfg', "_UpdateParts")
    ProgressSet(100,"Return: " & $x & @CRLF & "Error: " & @error)
    ProgressOff()
    _FTPClose($FTPServer)
    _FTPClose($FTP)
    EndFunc
    Func _UpdateParts($percent)
    ProgressSet($percent,$percent &"%")
    If _IsPressed("77") Then Return 0
    Return 1 ; bei 1 Fortsetzten
    Endfunc

    [/autoit]


    gelöst. Ich habe das für einen Upload genommen mit UploadProcess Anzeige. Hoffe das hilft dir.

    mfg Nuke

    AutoIT rockt! :rock:

    Einmal editiert, zuletzt von Nuke (12. Mai 2009 um 16:47)

  • Von der Funktion hab ich bisher noch nix gehört.. werd ich mir gleich mal zuhause ansehen.

    Danke schonmal ;)

  • Hallo Hundi,

    ich könnte mir vorstellen, dass der Server eine gewisse Zeit verstreichen lässt, bis er wieder eine Anfrage von dir zulässt. Gibt _FtpPut den keinen @error zurück, damit du mehr Infos über den Fehler bekommst,

    mfg (Auto)Bert

    • Offizieller Beitrag

    Beim durchgucken des Script-Fragments ist mir das hier aufgefallen:

    [autoit]

    $array_multi_files = StringSplit( $multi_files, @CR )

    [/autoit]

    Am Ende jeder Zeile steht doch aber @CRLF, somit sind im Array falsche Daten.
    Probier's mal so:

    [autoit]

    $array_multi_files = StringSplit( $multi_files, @CRLF, 1 )

    [/autoit]
  • Habs gestern nicht mehr geschafft was zu testen^^


    Zum FtpPut.. Der gibt bei der 1. Datei eine 1, bei allen weiteren eine 0 zurück..

    Mit Zeitverstreichen hab ich mir auch schon gedacht und deshalb mal mit Sleep versucht.. klappt aber auch nicht.

    Zu dem Split des Arrays.. der splitted die richtig auf.. die erste Datei klappt ja auch immer und wenn ich an na anderen Stelle im Array anfang funktioniert das auch.. aber halt immer nur das erste Mal.

  • So ich hab das jetzt mal ausprobiert.. Ist aber auch etwas komisch..

    Der läd mir zwar alle Dateien hoch, gibt mir aber auch bei der ersten eine 1 zurück und bei allen anderen eine 0.

    Der Progress-Balken erscheint auch nur bei der ersten Datei, bei allen weiteren nicht.

  • Du kannst es auch so versuchen:

    [autoit]


    #include "FTP_Ex.au3"
    $FTP = _FTPOpen("AutoIt v3")
    $FTPServer = _FTPConnect($FTP,$serv,$user,$pass,1)
    _FTPPutFile($FTPServer, "C:\1.jpg", '1.jpg') AND
    _FTPPutFile($FTPServer, "C:\2.jpg", '2.jpg')
    _FTPClose($FTPServer)
    _FTPClose($FTP)

    [/autoit]

    Ist aber eher für wenige Dateien gedacht.

    AutoIT rockt! :rock:

  • Und da ich auch nicht weiß wie viele Dateien hochgeladen werden sollen muss das deh in ne Schleife;)

  • Ähm.. mir ist noch mal aufgefallen.. der läd da gar nicht alle files hoch, der zeigt nur alle an.

    Aber nur die erste hat der wirklich geladen, alle anderen sind 0 kb groß.