我有一个perl程序,用二进制数据编写application / zip文件。我可以在我的cgi脚本中执行以下代码。
print $cgi->header(-type=>"application/x-zip; name=\"$filename.zip\"", -content_disposition=> "attachment; filename=\"$filename.zip\""). "\n";
print $result
其中$result
是二进制数据。然后,这将输出一个提示用户下载zip的页面
我想要做的是将整个'网页'作为表单参数传递,所以我这样做了:
open $resultfh, ">", \$output_buffer or die "could not open buffer";
print $resultfh $cgi->header(-type=>"application/x-zip; name=\"$filename.zip\"", -content_disposition=> "attachment; filename=\"$filename.zip\""). "\n";
print $resultfh $result
然后我可以将$output_buffer
作为变量传递。
问题是这不起作用,某些似乎被传递,因为我被提示下载zip文件,但是zipfile已损坏,我得到了预期的字节与之间的不匹配实际的字节或东西。
我认为这与输出缓冲区没有处于二进制模式有关,但我无法以二进制模式读取内容标题,因此我可以将文件句柄部分放在文本中部分是二进制的?
如果没有,我有哪些选择?
编辑:当我将二进制数据作为cgi格式参数传递时,问题实际上似乎发生了。谁知道问题可能是什么?可能有尺寸限制?
答案 0 :(得分:1)
将文件句柄设置为使用二进制。当您需要打印您知道的“文本”内容时,请明确使用适当的行尾序列。例如,对于将在Windows上处理的数据:
binmode $handle;
print $handle $some_text, "\r\n";
print $handle $some_binary_data;