我正在使用 perl 脚本发布到 Google Appengine 应用程序。我使用 -F 选项发布了一个包含一些 XML 的文本文件。

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

有一个版本1.2,已经测试并遇到同样的问题。该帖子看起来像这样。

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

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

我已经修改了示例,因此 202 不正确,不用担心。说到问题。内容长度与文件上的字节数匹配,但是除非我手动增加内容长度,否则它不会发送所有文件,一些字节会被截断。对于不同大小的文件,截断的字节数并不相同。我在脚本上使用了 -r 选项,我可以看到它正在发送的内容,并且正在发送所有文件,但 Google Appengine self.request.body 显示并未收到所有内容。我认为解决方案是为 Content-Length 获取正确的数字,显然它并不像文件上的字节数或 perl 脚本以某种方式破坏它那么简单。

更新:感谢埃里克森的正确答案。我使用 printf 将字符附加到文件末尾,它总是准确地截断文件中的行数。我想我可以通过迭代服务器端的每个字符来找出要添加的内容,但不值得。为应用程序引擎设置的谷歌群组甚至没有回答这个问题!

有帮助吗?

解决方案

您需要的额外字节数是否等于文件中的行数?我问这个问题是因为也许有可能以某种方式引入了回车符但没有被计算在内。

其他提示

我以前也遇到过类似的问题。

我假设您正在使用 length() 函数来确定文件的大小?如果是这样,您发布的数据很可能是 UTF-8 编码的,而不是 ASCII。

要获得正确的计数,您可能需要添加“使用字节”;巴格马到脚本的顶部,或将长度调用包裹在一个块中:

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

来自 perlfunc 手册页:

“注意字符:如果 EXPR 采用 Unicode,您将得到字符数,而不是字节数。”

你如何获得字节数?..通过查看文件系统上文件的大小?

您可以使用“-s”来获取文件的大小。

或者,如果您想做更多,您可以使用 文件::统计

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top