我正在尝试编写一个ruby fcgi脚本,它可以动态压缩目录中的文件,并将输出作为http响应按块发送.非常重要的是,此压缩是作为流操作完成的,否则客户端将为大型目录获取超时.
我有以下代码:
d="/tmp/delivery/"
# send zip header
header(MimeTypes::ZIP)
# pseudocode from here on
IO.open(d) { |fh|
block=fh.readblock(1024)
#send zipped block as http response
print zip_it(block)
}
Run Code Online (Sandbox Code Playgroud)
如何在上面的列表中实现我所写的伪红宝石?
Tokland 使用外部 zip 命令的想法效果很好。下面是一个快速片段,适用于 Linux 或类似环境中的 Ruby 1.9。它使用数组参数来popen()避免任何 shell 引用问题和sysread/syswrite以避免缓冲。rescue如果您愿意,您可以在空块中显示状态消息- 或者您可以使用read和write,尽管我还没有测试过这些。
#! usr/bin/env ruby
d = '/tmp/delivery'
output = $stdout
IO.popen(['/usr/bin/zip', '-', d]) do |zip_output|
begin
while buf = zip_output.sysread(1024)
output.syswrite(buf)
end
rescue EOFError
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1803 次 |
| 最近记录: |