Question
J'utilise pycurl pour télécharger un fichier via un script put et python cgi afin de recevoir le fichier côté serveur. Le code côté serveur est essentiellement le suivant:
while True:
next = sys.stdin.read(4096)
if not next:
break
#.... write the buffer
Cela semble fonctionner avec du texte, mais pas avec des fichiers binaires (je suis sous Windows). Avec les fichiers binaires, la boucle exécutant stdin.read est interrompue après avoir reçu quelque chose entre 10 et 100 Ko. Des idées?
La solution
Vous devez exécuter Python en mode binaire. Modifiez votre script CGI à partir de:
#!C:/Python25/python.exe
ou ce qu'il dit:
#!C:/Python25/python.exe -u
Ou vous pouvez le faire par programme comme ceci:
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
avant de commencer à lire à partir de stdin
.
Autres conseils
Utilisez mod_wsgi au lieu de cgi. Il vous fournira un fichier d’entrée pour le téléchargement correctement ouvert.