2017-04-22 1 views
-2

Mon programme Python envoie une image à mon serveur Web via FTP, mais occasionnellement à l'arrivée, des données partielles sont perdues à partir de l'image transférée. Le programme prend une capture d'écran toutes les x secondes, puis télécharge l'image sur le serveur Web. Mon fournisseur d'hébergement Web pense qu'il doit provenir du programme Python lui-même, alors s'il vous plaît laissez-moi savoir ce que je fais mal de provoquer ce problème.Pourquoi mon image perd-elle des données via mon programme FTP Python?

image (ce qu'il ressemble lorsqu'il est tiré à partir du serveur Web):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

Avez-vous vérifié la taille du fichier avant et après le téléchargement? Est-ce qu'ils correspondent? –

+0

@MartinPrikryl crédit est due à vous à cause de votre suggestion. En surveillant la taille du fichier, j'ai pu diagnostiquer le problème. Merci pour l'aide. Aussi, grand fan de votre logiciel – jameson1128

Répondre

2

Ainsi, la raison réelle pour cela me était dû à l'ouverture du FTP l'image du serveur Web avant la fin du transfert. Ma solution consistait à ajouter un filtre PHP à mon serveur Web pour ne tirer l'image que lorsqu'elle était au-dessus d'une taille spécifique afin d'éviter la visualisation prématurée du fichier avant la fin du transfert.

Il fonctionne parfaitement maintenant et je suis heureux que le problème était une solution simple programmatique

+0

C'est la raison pour laquelle je demandais aboit la taille –

+0

@MartinPrikryl Yep. J'ai essayé de le reconnaître dans une réponse à votre commentaire ci-dessus. Merci Martin – jameson1128