Ruby streaming tar / gz

В основном я хочу передавать данные из памяти в формат tar / gz (возможно, несколько файлов в tar, но НИКОГДА НЕ ПРИКАСАТЬСЯ К ЖЕСТКОМУ ДИСКУ, только потоковая передача!), а затем передавать их в другое место ( тело HTTP-запроса в моем случае).

Кто-нибудь знает о существующей библиотеке, которая может это сделать? Есть ли что-нибудь в Rails?

libarchive-ruby - это только оболочка C, и кажется, что это было бы очень зависит от платформы (документы хотят, чтобы вы скомпилировали на этапе установки ?!).

РЕШЕНИЕ:

require 'zlib'
require 'rubygems/package'

tar = StringIO.new

Gem::Package::TarWriter.new(tar) { |writer|
  writer.add_file("a_file.txt", 0644) { |f| 
    (1..1000).each { |i| 
      f.write("some text\n")
    }
  }
  writer.add_file("another_file.txt", 0644) { |f| 
    f.write("some more text\n")
  }
}
tar.seek(0)

gz = Zlib::GzipWriter.new(File.new('this_is_a_tar_gz.tar.gz', 'wb'))  # Make sure you use 'wb' for binary write!
gz.write(tar.read)
tar.close
gz.close

Вот и все! Вы можете заменить файл в GzipWriter любым вводом-выводом, чтобы сохранить его в потоковом режиме. Куки для dw11wtq!

5
задан 11 revs 24 October 2011 в 17:56
поделиться