rubyzip Zip :: ZipFile.open_buffer需要类String或IO的参数

时间:2017-11-22 14:34:04

标签: ruby ruby-on-rails-4 rubyzip

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

  

IRB(主):144:0> my_string   => " \ x1F的\ x8B \ B \ X00 \ XCB' \ xFBY \ X02 \ XFF \ xC5R \ xC1n \ xDB0 \˚F\ XBD \ XF7 + \ X04 \ xF46 \ xA8 \ x81d \ XCB \ X96} \˚F \ X92 \ X15 \ XEB \ X90 \ XE6 \ XB0 \ X04 \ xD8qPd和放大器; \ XD1 \ x12K \西航$ W \ xE8 \ XDF \ X8F \ X96 \ x9A \ XA2 \的x87 \ X01 \ x03r \ t \ r \ x8B | \ x92H>> \的xD \ 0x7F部分\ XC0 \ XCB \ b \ XE1 \ X03 \ X84 \ XC1 \ xD9 \ X00 \ X19 = Z \ xD7o \ XC1 \ XF7 \ x19m] \ x8Aw * \ XEA \ xE3z \ xECwX%泽\ X83 \ XD2 \ xD18 \ XFB \ XD 4 \ X91 \ X88 \ xC7 \ XC6 \ XE2 \ XC5 \ XB7 \ X01 \ x88V \ xBEKA \ X88 * \ x8E \ x81D \ xD3c \ X17 \ XD5 \ x0FD \ XBD \ x82W !\ AX \ X1D \ XB2 \ xD9 \西飞\ XDE VM; \ xB9 \ XFB \ XD 4 * \ XC 1 \ XC 1 \ XD8 \ XC3< \ XD7 \ xC8 \ x04R \ x9B \ XDE   \ X01 \ xFCU \ xEFF \ x8B \ XD3 \ x98a \ x9E#\ X0F \ XFA \ x9D \固定的\ xCEX \ XD2 + M,\ XC4?\ XCE \ x9F \ xC8 \ XD1 \ X85 \ xB8U \的x87 \ xE41s \ ˚F\ xE0 \ XD1 \ X81 \ XF7 \ xCFAG:\ xD0gc \ XA1#\ XC6 \ XBE:\ XA3 \ x013pc \ XD2 \ XB5#\ XBF \的xDD \ xE8q〜RV \ X16 \ XAC \ XEA \ XB3 \ b \ XDF \ XDC \ xB9 \ X03 \ XBF \ x9E   6 @ \ xDEOK \ XA2 \ XB4 \ x8E_m \ xF48 \ XBD; \ X81 \ xC5f \ XFB \ xA5 \ x8A \ x8A \ X84 \ XD1 \ XEB \ XA3 \ xF28 \ XD8 \ XDE \ x9D \ x8DCxF0B \ XA0 \ X0F \ X1E版权所有\ xA9 \ XA1 \ XA4 \ xC1DHBbt \ XB0 \ xA8 \ XB7 \的x87 \ XAC \ XFD \ X05 \的xDD \ xDDc \ xE30 \ XD5 \ XE1 \ XB3 \ x8A \ x143.f \ XDB \ X15 \ XBA \ XA2 \ xBAc \ XF4 \ XF2 \ xA5 \ xA5 \ x9C \ xFE如果\ xA6 \ X94 \ XAC \ X15 \ x92I)(C \ XFB \ XB4

现在,我想在内存中读取此信息,解压缩并解析csv文件。 我正在使用rubyzip并尝试以下方法:

Zip::File.open_buffer(my_string) do |zip|
  zip.each do |entry|
    decompressed_data += entry.get_input_stream.read
  end
end
  

RuntimeError:Zip :: ZipFile.open_buffer期望一个类的参数   字符串或IO。找到:来自(irb)的字符串:224

有没有办法检索zip文件的内容?

1 个答案:

答案 0 :(得分:2)

我认为这里的主要问题是错误信息有点误导......

它应该说预期的文件名或者io。

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

由于open_buffer已弃用,您应使用open

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