我正在尝试编写一个Perl CGI脚本,它将客户端机器上传的文件保存到服务器上的文件中。在客户端,C#代码使用httpWebRequest并通过流发送数据。
上传的数据似乎没有关联的参数,所以我很难读懂它(我对C#一无所知)。在Stackoverflow上搜索后,我设法使用以下命令捕获数据:
$query = CGI->new();
$data = $query->param('POSTDATA');
我现在可以直接将这些数据写入一个文件,
open ( FH, ">$filename" ) or die ("error opening file $filename: $!");
print FH $data;
close FH;
这对于小文件来说很好用。但是,当POSTDATA包含大小超过500MB的大数据时,Perl CGI脚本将等待所有文件下载完毕,然后将其写入文件。似乎POSTDATA包含了整个文件。这会对系统内存造成压力。是否有其他方法可以读取httpWebrequest流数据并将其写入文件?
发布于 2011-11-03 16:32:53
使用CGI模块则不可能。此外,我不知道有任何Perl CGI实现可以为POST数据提供流句柄。
考虑切换到PSGI。body
method in Plack::Request为您提供了一个文件句柄以供读取。
示例应用程序(未测试):
plackup -MIO::File::WithPath -MPlack::Request -MSys::Sendfile=sendfile -e '
my $app = sub {
my ($env) = @_;
my $out = IO::File::WithPath->new("/tmp/out", "w") or die $!;
my $req = Plack::Request->new($env);
my $r = sendfile($out, $req->body) or die $!;
return [200, [], []]
}
'
lwp-request -m POST -c text/plain -USe http://localhost:5000 < /usr/src/linux/COPYING
https://stackoverflow.com/questions/7996599
复制相似问题