Question

Je suis à l'aide d'un script perl pour publier sur Google Appengine application.Je poste un fichier texte contenant des données XML à l'aide de l'option-F.

http://www.cpan.org/authors/id/E/EL/ELIJAH/bget-1.1

Il existe une version 1.2, déjà testé et obtenir le même problème.Le post ressemble à quelque chose comme ça.

Host: foo.appspot.com
User-Agent: lwp-request/1.38
Content-Type: text/plain
Content-Length: 202

<XML>
   <BLAH>Hello World</BLAH>
</XML>

J'ai modifié l'exemple pour les 202 n'est pas bonne, ne vous inquiétez pas à ce sujet.Sur le problème.La Longueur du Contenu correspond au nombre d'octets dans le fichier, mais à moins que j'ai augmenter manuellement la Longueur du Contenu, il n'envoie pas tous les fichier de quelques octets obtenir tronquée.Le nombre d'octets tronquée n'est pas la même pour les fichiers de différentes tailles.J'ai utilisé l'option-r sur le script et je peux voir ce que ça envoie et c'est d'envoyer le fichier, mais Google Appengine de soi.demande.corps montre que tout n'est pas reçu.Je pense que la solution est d'obtenir le bon nombre de Contenu de Longueur et apparemment, il n'est pas aussi simple que le nombre d'octets sur le fichier ou le script perl est une déformation d'elle en quelque sorte.

Mise à jour:Grâce à Erickson pour le droit de réponse.J'ai utilisé printf pour ajouter des caractères à la fin du fichier, et il est toujours tronquée exactement le nombre de lignes dans le fichier.Je suppose que j'ai pu comprendre ce qui est ajouté en une itération à travers chaque personnage sur le serveur mais pas la peine.Ce n'était même pas répondu plus sur le google groupes mis en place pour app engine!

Était-ce utile?

La solution

Est le nombre d'octets supplémentaires vous avez besoin égal au nombre de lignes dans le fichier?Je demande parce que peut-être il est possible qu'en quelque sorte le transport-les rendements sont en train d'être mis en place, mais ne sont pas comptés.

Autres conseils

J'ai couru dans des problèmes similaires avant.

Je suppose que vous êtes à l'aide de la longueur de la fonction() pour déterminer la taille du fichier?Si oui, il;s probable que les données que vous publiez est codé en UTF-8, au lieu de l'ASCII.

Pour obtenir le nombre correct, vous pouvez avoir besoin d'ajouter un "utilisation d'octets;" pragma vers le haut de votre script, ou enveloppez la longueur d'appel dans un bloc:

my $size;
do {use bytes; $size = length($file_data)}

À partir de la page de manuel perlfunc:

"Remarque les caractères:si EXPR est en Unicode, vous obtiendrez le nombre de caractères, et non pas le nombre d'octets".

Comment êtes-vous d'obtenir le nombre d'octets?..En regardant la taille du fichier sur le système de fichiers?

Vous pouvez utiliser l'option "-s" pour obtenir la taille du fichier.

Ou, si vous voulez faire plus, vous pouvez utiliser File::Stat

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top