开发者

PERL CGI: Filehandle that uses both binary and text mode

I have a perl program that writes application/zip document with binary data. I can do the following code in my cgi script.

print $cgi->header(-type=>"application/x-zip; name=\"$filename.zip\"", -content_disposition=> "attachment; filename=\"$filename.zip\""). "\n";
print $result

where $result is the binary data. This will then output a page that prompts the user to download the zip

What I want to do though is pass that entire 'webpage' as form parameter, so I did this:

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

and then I can pass the $output_buffer around as variable.

The problem is that this doesn't work, something seems to get passed because I'm prompted to download the zipfile, but the zipfile is corrupted, I get a mismatch between the expected bytes and the actual bytes or something.

I think this has to do with that output buffer not being in binary mode, but I can't read the content header in binary mode, so can I have a file handle be partially in text and partially in binary?

If not, what options do I have?

EDIT: The problem actually seems to happen when I pass the bin开发者_开发百科ary data as a cgi form param. Anyone know what the problem might be? Maybe a size limit?


Set the filehandle to use binary. When you need to print something that you know is "text", use the appropriate end-of-line sequence explicitly. For example, for data that will be processed on Windows:

binmode $handle;
print $handle $some_text, "\r\n";
print $handle $some_binary_data;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜