2009-12-29 9 views
0

J'utilise Apache 2.2.14 et Python 2.6 pour CGI sous Windows XP. Les fichiers envoyés via CGI sont corrompus. Un CR est inséré avant chaque LF. Les clients Firefox, IE et Curl donnent le même résultat. Le fichier a la taille correcte, mais les CR sont insérés partout, et les données sont décalées vers le bas et tronquées. Je peux regarder le fichier sur le serveur, et ça va.Apache: Télécharger les fichiers en insérant un CR avant chaque LF (même les tableurs)

Y a-t-il un commutateur dans Apache qui me manque?

Voici le code python pour écrire l'en-tête HTTP et envoyer le fichier:


outsize = os.path.getsize(outfile) 
mheader = "Content-type: application/octet-stream\n" 
mheader = mheader + "Content-Length: "+str(outsize) + "\n" 
mheader = mheader + "Content-Disposition: attachment; filename=\"product.xls\"\n\n" 
sys.stdout.write(mheader) 
sys.stdout.write(file(outfile, "rb").read()) 

L'en-tête ressemble à ceci:

 
Content-type: application/octet-stream 
Content-Length: 84210 
Content-Disposition: attachment; filename="product.xls"

Répondre

3

Utilisez msvcrt.setmode(1, os.O_BINARY) (après que vous écrivez les en-têtes et sys.stdout.flush eux) pour définir la sortie standard en mode binaire - pauvre Apache est innocent, c'est une chose Windows ;-).

+0

Merci. J'ai ajouté la couleur et le setmode, mais cela n'a pas aidé. –

+0

FIXE !!! Merci!!! Msvcrt.setmode (1, os.O_BINARY) est ce qui est nécessaire. Le handle pour stdout est 1. –

Questions connexes