在阅读了一些帖子和维基百科之后,我仍然不清楚chunked
标头用法的实际示例。
我从Content-Length header versus chunked encoding看到的一个例子是:
另一方面,如果内容长度确实不可预测 事先(例如,当您打算将多个文件压缩在一起时, 将其作为一个发送),然后分块发送可能比 将其缓冲在服务器的内存中或写入本地磁盘文件系统 首先。
所以这意味着我可以在压缩文件的同时发送压缩文件?怎么样 ?
我还注意到,如果下载GitHub存储库,我将在chunked
中接收数据。 GitHub是否也以这种方式发送文件(在压缩时发送)?
一个最小的例子将不胜感激。 :)
答案 0 :(得分:0)
这里是一个使用perl(带有IO :: Compress :: Zip模块)以@deceze指向的方式动态发送压缩文件的示例。
use IO::Compress::Zip qw(:all);
my @files = ('example.gif', 'example1.png'); # here are some files
my $path = "/home/projects/"; # files location
# here is the header
print "Content-Type: application/zip\n"; # we are going to compress to zip and send it
print "Content-Disposition: attachment; filename=\"zip.zip\"\r\n\r\n"; # zip.zip for example is where we are going to zip data
my $zip = new IO::Compress::Zip;
foreach my $file (@files) {
$zip->newStream(Name => $file, Method => ZIP_CM_STORE); # storing files in zip
open(FILE, "<", "$path/$file");
binmode FILE; # reading file in binary mode
my ($buffer, $data, $n);
while (($n = read FILE,$data, 1024) != 0) { # reading data from file to the end
$zip->print($data); # print the data in binary
}
close(FILE);
}
$zip->close;
正如您在脚本中看到的那样,即使您在标题中添加zip文件名也没关系,因为我们正在压缩文件并立即以二进制模式打印它,因此无需压缩数据并存储它们,然后将其发送给客户端,您可以直接压缩文件并打印它们,而无需存储它们。