我在内存中生成了许多PDF文件,我想在将其作为邮箱附件发送之前将其压缩为一个zip文件.我看过Rubyzip,它不允许我在不保存到磁盘的情况下创建zip文件(可能我错了).
有没有什么方法可以在不创建临时文件的情况下压缩这些文件?
我在内存中生成了许多PDF文件,我想在将其作为邮箱附件发送之前将其压缩为一个zip文件.我看过Rubyzip,它不允许我在不保存到磁盘的情况下创建zip文件(可能我错了).
有没有什么方法可以在不创建临时文件的情况下压缩这些文件?
我有一个类似的问题,我用rubyzip gem和stringio对象解决了这个问题.
您可以使用put_next_entry
和write创建您喜欢的zip文件 struct ,完成后,您可以倒带stringio并使用sysread读取二进制数据.
请参见以下简单示例(适用于rubyzip 0.9.X)
require 'zip/zip'
stringio = Zip::OutputStream.write_buffer do |zio|
zio.put_next_entry("test.txt")
zio.write "Hello world!"
end
stringio.rewind
binary_data = stringio.sysread
在jruby 1.6.5.1(ruby-1.9.2-p136)(2011-12-27 1bf37c2)(Java HotSpot(TM)64位服务器VM 1.6.029)[Windows Server 2008-amd64-Java]上测试
The following example works for rubyzip >= 1.0.0
require 'rubygems'
require 'zip'
stringio = Zip::OutputStream.write_buffer do |zio|
zio.put_next_entry("test.txt")
zio.write "Hello world!"
end
binary_data = stringio.string
在OpenJDK 64位服务器VM 1.7.0_79-b14+jit[linux-amd64]和rubyzip gem 1.1.7上的jruby 1.7.22(1.9.3p551)2015-08-20 c28f492上测试