我必须根据服务器上的用户输入创建一个文件。返回该文件。 现在,一旦文件返回给用户,我不想要文件(否则它们将填满我的磁盘空间)。 有这样做的好方法吗? 我必须在Perl中做到这一点。
谢谢。
答案 0 :(得分:5)
如果您正在构建一个zip文件并立即将其发送回客户端,那么您有很多选择。
您可以使用writeToFileHandle
结合IO::Scalar
将zip文件数据直接写入字符串并将其发回。这种方法完全避免了整个文件问题。
您还可以使用writeToFileHandle
与File::Temp
结合来写入临时文件,然后再将该文件流式传输。 UNLINK
的{{1}}选项也可以帮助您自动清理临时文件。
答案 1 :(得分:0)
这是我创造并为我工作的。当用户在我的页面上打开一些URL时,我正在创建ZIP存档并将其发送给用户。
如果改变" - " to" file.zip"它会将存档保存到您的主机/服务器中(并且不需要打印"内容类型")。
尝试使用大尺寸文件(每个文件400-500Mb) - 一切正常。
use IO::Compress::Zip qw(:all);
my @files = ('example.gif', 'example1.png', 'example2.jpg', 'example3.avi', 'example4.mov');
my $path = "/home/********/**********";
print "Content-Type:application/zip\n";
print "Content-Disposition: attachment; filename=\"filename.zip\"\n\n";
my $z;
foreach my $file (@files) {
if ($z) {
$z->newStream(Name => $file, Method => ZIP_CM_STORE);
} else {
$z = new IO::Compress::Zip "-", Name => $file, Method => ZIP_CM_STORE;
}
open(FILE, "<", "$path/$file");
binmode FILE;
my ($buf, $data, $n);
while (($n = read FILE,$data, 1024) != 0) {
$z->print($data);
}
close(FILE);
}
$z->close;
exit;