Pregunta

Estoy usando un script en Perl para PUBLICAR en la aplicación Google Appengine.Publico un archivo de texto que contiene algo de XML usando la opción -F.

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

Existe una versión 1.2, ya probada y con el mismo problema.La publicación se parece a esto.

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

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

He modificado el ejemplo para que el 202 no esté bien, no te preocupes por eso.Vayamos al problema.La longitud del contenido coincide con la cantidad de bytes del archivo; sin embargo, a menos que aumente manualmente la longitud del contenido, no envía todo el archivo y se truncan algunos bytes.La cantidad de bytes truncados no es la misma para archivos de diferentes tamaños.Utilicé la opción -r en el script y puedo ver lo que envía y envía todo el archivo, pero Google Appengine self.request.body muestra que no se recibe todo.Creo que la solución es obtener el número correcto para Content-Length y aparentemente no es tan simple como el número de bytes en el archivo o el script Perl lo está alterando de alguna manera.

Actualizar:Gracias a Erickson por la respuesta correcta.Utilicé printf para agregar caracteres al final del archivo y siempre truncaba exactamente el número de líneas del archivo.Supongo que podría descubrir qué se agrega al iterar sobre cada carácter en el lado del servidor, pero no vale la pena.¡Esto ni siquiera fue respondido en los grupos de Google configurados para el motor de aplicaciones!

¿Fue útil?

Solución

¿La cantidad de bytes adicionales que necesita es igual a la cantidad de líneas en el archivo?Lo pregunto porque tal vez sea posible que de alguna manera se introduzcan devoluciones de carro pero no se cuenten.

Otros consejos

Me he encontrado con problemas similares antes.

¿Asumo que estás usando la función length() para determinar el tamaño del archivo?Si es así, es probable que los datos que estás publicando estén codificados en UTF-8, en lugar de ASCII.

Para obtener el recuento correcto, es posible que deba agregar un "Usar bytes"; pragma en la parte superior de su guión, o envuelva la llamada de longitud en un bloque:

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

Desde la página de manual de perlfunc:

"Tenga en cuenta los personajes:Si EXPR está en Unicode, obtendrá la cantidad de caracteres, no la cantidad de bytes".

¿Cómo obtienes la cantidad de bytes?..¿Observando el tamaño del archivo en el sistema de archivos?

Puede utilizar "-s" para obtener el tamaño del archivo.

O, si quieres hacer más, puedes usar Archivo::Estadística

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top