2010-11-09 15 views
1

J'ai un serveur HTTP (newLISP fonctionnant sous Linux) qui exécute mes scripts CGI. Il fonctionne sur ma machine Linux.Problème de téléchargement de fichiers binaires

J'ai un problème étrange avec le téléchargement de fichiers en utilisant la méthode POST. Mon script CGI est simple: il lit tout depuis stdin et l'enregistre dans un fichier. J'ai écrit le script à des fins de débogage: je voulais savoir, ce qui est lu exactement. Lorsque je télécharge un fichier texte, tout va bien. Je veux dire que je reçois quelque chose comme ça:

-----------------------------18218802734725416881815749595 
Content-Disposition: form-data; name="uploaded_data"; filename="post.gif" 
Content-Type: image/gif 

(and here's the content of the text file) 

-----------------------------18218802734725416881815749595 
Content-Disposition: form-data; name="text_field_name" 

text field value 
-----------------------------18218802734725416881815749595 
Content-Disposition: form-data; name="submit" 

Upload 
-----------------------------18218802734725416881815749595--

Et c'est exactement ce que je devrais, selon la RFC 1867 (fichier à base de formulaires Upload en HTML). (Oui, j'ai renommé ce fichier texte en "post.gif".)

Le problème est, je reçois quelque chose de vraiment étrange, quand j'essaye de télécharger un fichier binaire. Par exemple, quand je télécharge une image gif, je reçois ceci:

-----------------------------208529943213031756281593958364 

Content-Disposition: form-data; name="uploaded_data"; filename="polsl.gif" 
Content-Type: image/gif 

GIF89a_

Quelle peut être la cause de ce comportement étrange?

Répondre

0

Il semble que la chaîne binaire soit en train d'être écrite et que l'enregistreur n'écrive pas les caractères non imprimables. Ou il est en train de les écrire et tout éditeur que vous regardez le fichier avec les filtre. Essayez Base-64 codant les données que vous recevez avant de l'écrire dans le fichier et voir si cela change les choses. D'ailleurs, tous les GIF commencent par la chaîne GIF89a.