如何在ruby中仅在内存中创建zip文件?

我想创建给定目录中所有HTML文件的zip文件。 该zip将通过电子邮件作为附件与目录中的其余文件一起发送。 如果我从小马发送任何附件是HTML文件,我到目前为止尝试的所有电子邮件客户端都无法阅读电子邮件。 所以我以为我会拉链。

有没有办法在运行时压缩 HTML 文件,但实际上只在内存中 ,而不使用Windows平台上的任何临时文件? 最好不要使用任何外部程序?

如果我理解正确,两种方法描述如下:

  • http://info.michael-simons.eu/2008/01/21/using-rubyzip-to-create-zip-files-on-the-fly/或
  • http://rubyzip.sourceforge.net/classes/Zip/ZipFile.html

正在使用某种临时文件。

起初我想也许你可以使用StringIO对象来编写,但看起来ZipOutputStream类坚持打开一个临时文件。

如果您不介意调用外部程序,可以通过使用“ – ”而不是文件名告知标准linux zip将otuput发送到stdout而不是文件。 所以只需将输出收集到一个变量中,然后用它做任何你喜欢的事情。

zipdata = %x(zip -q - *.html) 

我认为这不仅仅是使用临时文件的效率提升,而是你必须测量它才能确定。