ftp Verzeichnis Download

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Sonntag 12. August 2007, 16:22

Hi!
Ich wollte eigentlich von einer Fotoseite einen Zipordner mit vom User ausgewählten Bildern zum Download anbieten. Das geht jetzt aber nicht, da's ein Filesizelimit gibt. Da ich den Upload der Bilder eh schon über ein Pythonprogramm mache, möchte ich da jetzt auch den Download des Ungezippten Bilderordners einbauen.
Frage: Gibt es da was "fertiges" oder muss ich mir das selbst bauen?
Ich hab ein ftplib.FTP-Objekt und ein Zielverzeichnis. Ich hab shutil gefunden, aber geht das auch mit FTP?

Gruß, jj
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Montag 13. August 2007, 15:17

Inzwischen bin ich soweit, das erstmal ein paar Dateien heruntergeladen werden, bevor dann wieder die Fehlermeldung kommt. Das Problem ist jetzt aber, das die Bilder zwar da sind, ich sie aber nicht betrachten kann.
IrfanView sagt bei zweien, das es ein unbekanntes Bildformat sei, und bei einem Bild "JPGDekodierungsfehler! Quantization table 0x01 was not defined".
Kanns an dem Code liegen?

Code: Alles auswählen

cmd = "RETR "+name
            f = file(dst, "wb")
            self.retrlines(cmd, lambda line: f.write(line))
            f.close
LG
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 13. August 2007, 16:06

schlangenbeschwörer hat geschrieben:unbekanntes Bildformat
Hallo schlangenbeschwörer!

Du musst ``retrbinary`` verwenden.

Hier ein etwas erweitertes Beispiel: http://www.python-forum.de/post-56361.html#56361

Ansonsten würde ich hier im Forum einfach mal nach "*retrbinary*" (ohne Anführungszeichen) suchen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Montag 13. August 2007, 16:59

Ja, habs grad gelöst.
Wobei da ein Fehler nach dem anderen kam...

Hier meine Klasse:

Code: Alles auswählen

# import ist zu verschönern...
from os.path import basename, splitext, isfile, isdir, islink, join, normcase, split
from os import makedirs

class myFTP(ftplib.FTP):
    def copy(self, src, dst): 
        path, name = split(src)
        self.cwd(path)
        cmd = "RETR "+name
        f = file(dst, "wb")
        self.retrbinary(cmd, lambda line: f.write(line))
        f.close
        self.cwd("/.")
        
    def copytree(self, src, dst):
        names = self.nlst(src)
        # del "/." und "/.."
        del names[0:2]
       try:
            makedirs(dst, 020)
        except OSError:
            "Warning: Verzeichnis existiert bereits: "+dst
        chmod(dst, 020)
        for name in names:
            srcname = join(src, basename(name))
            dstname = join(dst, basename(name))
            try:
                if isdir(srcname):
                    self.copytree(srcname, dstname)
                else:
                    self.copy(srcname, dstname)
            except (IOError, OSError), why:
                print "Can't copy %s to %s: %s" % (`srcname`, `dstname`, str(why))
Gruß, jj
Antworten