2015-08-12 1 views
0

USECASE: Je suis en train de lire le pdf d'URL, puis l'envoyer par FTPLire PDF et envoyer par FTP en Python

Je fonctionne comme:

def send_via_ftp(self, url, filename, ftp_site, username, password, directory): 

    import urllib2 
    try: 
     data = urllib2.urlopen(url) 
    except urllib2.URLError, e: 
     print "Failed to fetch content: %s" % e 
     return False 
    except urllib2.HTTPError, e: 
     print "HTTP ERROR: %s" % e 
     return False 

    return self.send_file_by_ftp(data, ftp_site, username, password, directory, filename) 

------- -------------------------------------------------- --------------------

def send_file_by_ftp(self, data, ftp_site, username, password, directory, filename):   

    import ftplib 
    try: 
     remote_ftp_connection = ftplib.FTP(ftp_site) 
    except ftplib.all_errors as e: 
     print str(e) 
     return False 
    else: 
     remote_ftp_connection.login(username, password) 
     try: 
      if len(directory): 
       remote_ftp_connection.cwd(directory) 
      remote_ftp_connection.storbinary("STOR %s" % filename, data) 
     except ftplib.error_perm,e: 
      print str(e) 
      return False 
     else: 
      remote_ftp_connection.quit() 
      return True 

Mon appel ressemble à: send_via_ftp ("http://url/ *** pdf", "XYZ.pdf", "ftp url 192.168.0.101", "XXXX", "YYYYY", "")

Le fichier a été créé avec succès dans le dossier FTP mais le contenu du fichier n'est pas écrit. Alors que je l'ouvre, il dit "Format Erreur: Pas un pdf ou corrompu". Quel pourrait être le problème? Un grand merci pour toute aide

+0

Avez-vous essayé de le séparer: premier téléchargement, contrôler le fichier téléchargé, et envoyer le prochain? –

+0

Maintenant, cela semble étrange ... Lorsque j'utilise Python Shell et exécutez la commande ci-dessus un par un, cela fonctionne bien ... Tout le monde sait pourquoi cela ne fonctionne pas dans le code ci-dessus? –

Répondre

0

On dirait que vous passez data comme deuxième paramètre à remote_ftp_connection.storbinary, mais il devrait être ftp_data. Vous ne savez pas pourquoi vous n'obtenez pas d'exception NameError.

+0

Oups erreur de frappe ... maintenant corrigé :) –

0

Étant donné que FTP utilise un objet semblable à un fichier, la modification suivante a fonctionné pour moi.

def send_via_ftp(self, url, filename, ftp_site, username, password, directory): 

import urllib2 
try: 
    from cStringIO import StringIO 
except: 
    from StringIO import StringIO 

try: 
    data = urllib2.urlopen(url) 
    data_ = StringIO(data.read()) 
    data_.seek(0) 
except urllib2.URLError, e: 
    print "Failed to fetch content: %s" % e 
    return False 
except urllib2.HTTPError, e: 
    print "HTTP ERROR: %s" % e 
    return False 
else: 
    content = data_.read() 

return self.send_file_by_ftp(content, ftp_site, username, password, directory, filename) 

=========================================== ==========================================

def send_file_by_ftp(self, data, ftp_site, username, password, directory, filename):   

    import ftplib 
    try: 
     from cStringIO import StringIO 
    except: 
     from StringIO import StringIO 
    try: 
     remote_ftp_connection = ftplib.FTP(ftp_site) 
    except ftplib.all_errors as e: 
     print str(e) 
     return False 
    else: 
     remote_ftp_connection.login(username, password) 
     try: 
      if len(directory): 
       remote_ftp_connection.cwd(directory) 
      remote_ftp_connection.storbinary("STOR %s" % filename, StringIO(data)) 
     except ftplib.error_perm,e: 
      print str(e) 
      return False 
     else: 
      remote_ftp_connection.quit() 
      return True