Ruby Unzip String

时间:2011-05-03 14:59:35

标签: ruby zip

我必须使用Ruby中的压缩(常规Zip )字符串。 显然我无法使用Ruby-ZipZip-Ruby保存临时文件。

是否有任何可行的方法来解压缩此字符串?

5 个答案:

答案 0 :(得分:4)

rubyzip supports StringIO since version 1.1.0

require "zip"
# zip is the string with the zipped contents
Zip::InputStream.open(StringIO.new(zip)) do |io|
  while (entry = io.get_next_entry)
    puts "#{entry.name}: '#{io.read}'"
  end
end

答案 1 :(得分:2)

请参阅Zip/Ruby Zip::Archive.open_buffer(...)

require 'zipruby'
Zip::Archive.open_buffer(str) do |archive|
  archive.each do |entry|
    entry.name
    entry.read
  end
end

答案 2 :(得分:1)

由于Ruby-Zip似乎缺乏对IO对象的读/写支持,因此可以伪造File。 你能做的是以下几点:

  1. 在Zip模块下创建一个名为File的类,该类继承自StringIO,例如: class Zip :: File< StringIO的
  2. 创建存在? class方法(返回true)
  3. 创建open class方法(将StringIO生成块)
  4. 存根关闭实例方法(如果需要)
  5. 也许它需要更多假方法

答案 3 :(得分:0)

正如@Roman提到的,rubyzip目前缺乏对IO对象的读写(包括StringIO.new(s))。请尝试使用zipruby,如下所示:

gem install zipruby

require 'zipruby'

# Given a string in zip format, return a hash where 
# each key is an zip archive entry name and each
# value is the un-zipped contents of the entry
def unzip(zipfile)
  {}.tap do |h|
    Zip::Archive.open_buffer(zipfile) do |archive|
      archive.each {|entry| h[entry.name] = entry.read }
    end
  end
end

答案 4 :(得分:-1)

zlib库。适用于StringIO。