2017-04-22 5 views
-2

Mein Python Programm sendet ein Bild an meinen Web-Server durch FTP, aber gelegentlich bei der Ankunft sind teilweise Daten aus dem übertragenen Bild verloren. Das Programm nimmt einen Screenshot alle x Anzahl von Sekunden und lädt dann das Bild auf den Webserver.Warum verliert mein Image Daten durch mein Python FTP-Programm?

Mein Webhosting-Anbieter denkt, es muss aus dem Python Programm selbst stammen, also lassen Sie mich bitte wissen, was ich falsch mache, um dieses Problem zu verursachen.

Bild (Wie es aussieht, wenn sie von dem Web-Server gezogen):enter image description here

Code:

def ftp(self): # Screen Grab and FTP Transfer 

    new = ImageGrab.grab(bbox=(0, 50, 1366, 720)) 
    new = new.resize((1366, 700), PIL.Image.ANTIALIAS) 
    new.save("C:\\Users\\Owner\\Desktop\\screenshots\\capture.jpg") 

    newOpen = PIL.Image.open("C:\\Users\\user\\Desktop\\screenshots\\capture.jpg") 
    newOpen.save("C:\\Users\\Owner\\Desktop\\screenshots\\capture.jpg", format="JPEG", quality=40) 

    tries = 10 # Denotes maximum try limit for retry attempts 

    for i in range(tries): 
     try: 

      # FTP image to Web Server 
      session = ftplib.FTP('server', 'user', 'pass') 
      file = open('C:\\Users\\Owner\\Desktop\\screenshots\\capture.jpg', 'rb') # file to send 
      session.storbinary('STOR capture.jpg', file) # send the file 
      file.close() # close file and FTP 
      session.quit() 

      value = "Updated. \nFailed " + str(i) + " Times\n" + str(self.tick) 

      print value 

      self.tick += 1 

     except KeyError as e: 

      if i < tries - 1: # i is zero indexed 

       continue 

      else: 

       raise 

     break 

    threading.Timer(5, self.ftp).start() 
+0

Haben Sie die Größe der Datei zu überprüfen, bevor und nach dem Upload? Passen sie zusammen? –

+0

@MartinPrikryl Kredit ist wegen Ihnen wegen Ihres Vorschlags fällig. Durch die Überwachung der Dateigröße konnte ich das Problem diagnostizieren. Danke für die Hilfe. Auch, großer Fan von Ihrer Software – jameson1128

Antwort

2

war der eigentliche Grund dafür also wegen mir die FTP Öffnung Bild vom Webserver, bevor die Übertragung abgeschlossen wurde. Meine Lösung war, einen Filter PHP zu meinem Webserver hinzuzufügen, um das Bild nur zu ziehen, wenn es über einer bestimmten Größe war, um die vorzeitige Ansicht der Datei zu vermeiden, bevor die gesamte Übertragung abgeschlossen wurde.

Es funktioniert perfekt jetzt, und ich bin froh, dass das Problem war eine einfache programmatische fix

+0

Das war der Grund, warum ich fragte die Größe –

+0

@MartinPrikryl Yep. Ich habe versucht, das in einer Antwort auf Ihren obigen Kommentar zu bestätigen. Danke Martin – jameson1128