新しい RubyZip API を使用したこの回答の最新バージョンについては、@bronson の回答を参照してください。
リンクした Rubyzip ドキュメントは少し古くなっています。最新のリリース (0.9.9)ではIO
オブジェクトを処理できるため、StringIO を使用できます (少し調整してください)。
API は を受け入れますがIO
、それがファイルであると想定して呼び出しを試みているように見えるpath
ため、最初にモンキー パッチを適用StringIO
してメソッドを追加しpath
ます (実際には何もする必要はありません)。
require 'stringio'
class StringIO
def path
end
end
次に、次のようなことができます。
require 'zip/zip'
Zip::ZipInputStream.open_buffer(StringIO.new(last_response.body)) do |io|
while (entry = io.get_next_entry)
# deal with your zip contents here, e.g.
puts "Contents of #{entry.name}: '#{io.read}'"
end
end
すべてがメモリ内で行われます。