rubyzip::ZipFile.open_缓冲区需要类字符串或IO的参数

rubyzip::ZipFile.open_缓冲区需要类字符串或IO的参数,ruby,ruby-on-rails-4,rubyzip,Ruby,Ruby On Rails 4,Rubyzip,我正在从压缩的数据库中读取blob数据(文件的内容是CSV)。 我的变量的结果如下所示: irb(主):144:0>my_字符串 => "\10\x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 1

我正在从压缩的数据库中读取blob数据(文件的内容是CSV)。 我的变量的结果如下所示:

irb(主):144:0>my_字符串
=> "\10\x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 \ \ \ \ \ \x7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 xD7o\xC1\xF7\x19m]\x8Aw*\xEA\xE3z\xECwX%ze\x83\xD2\xD18\xFB\xD4\x91\x88\xC7\xC6\xE2\xC5\xB7\x01\x88V\xBEKA\x88*\x8E\x81D\xD3c\x17\xD5\x0FD\xBD\x82W\aX\x1D\xB2\xD9\xAC\xDE!虚拟机\xB9\xFB\xD4*\xC1\xC1\xD8\xC3我认为这里的主要问题是错误消息有点误导

它应该是预期的文件名或io

在代码中,需要将内容包装在
StringIO
对象中,以便将其视为流

由于
open\u buffer
已被弃用,您应该使用
open


所以它看起来像是
open(StringIO.new(my_string)

我不知道@Michael使用的是哪个版本,但在0.9.9中,
open\u buffer
内部似乎产生了这个确切的消息,它不希望字符串参数是一个文件名。因此可能会有一个完全不同的问题。Zip::file.open(StringIO.new(我的字符串)do | zip |给了我:TypeError:没有将StringIO隐式转换为StringIO您使用的是哪个版本的zip?它看起来像是一个旧版本
Zip::File.open_buffer(my_string) do |zip|
  zip.each do |entry|
    decompressed_data += entry.get_input_stream.read
  end
end