Dav*_*ave 1 perl zip file-upload http
我正在尝试使用CGI脚本接受并保存使用HTTP POST发送zip文件的程序中的文件.
在HTTP标头的MIME部分,它看起来像这样:
Content-Disposition: form-data; name="el_upload_file_0"; filename="BugReport.zip";\r\n
Content-Type: application/octet-stream\r\n\r\n
Run Code Online (Sandbox Code Playgroud)
在我的CGI代码中我使用了这个:
use CGI;
use strict;
my $cgi = CGI->new;
my $upload_file = $cgi->upload('el_upload_file_0');
my $time = time;
my $filename = "/tmp/$time.zip";
open TMP, ">$filename";
binmode TMP;
while (<$upload_file>) {
print TMP $_;
}
close TMP;
Run Code Online (Sandbox Code Playgroud)
不断保存的文件以某种方式损坏并且不是有效的zip文件.HTTP请求是由C#应用程序发送的,它可能正在发送损坏的zip文件,但我对此表示怀疑.我有什么办法可以进一步排除故障吗?
你在逐行读取.zip文件,这是一个很大的错误.毕竟,行只与文本文件相关.
一次性阅读整个内容,或者如果必须,请以合理大小的块来完成.在这个例子中,它以1024字节的块读取,但你可以轻松使用更大的值,如16MB(1 << 24)或任何看似合适的值:
my $data;
while (read($upload_file, $data, 1024))
{
print TMP, $data;
}
Run Code Online (Sandbox Code Playgroud)