Как заставить Zlib сжимать в поток в Ruby? - PullRequest
0 голосов
/ 10 декабря 2011

Я пытаюсь загрузить файлы в Amazon S3, используя AWS :: S3 , но я бы хотел сначала сжать их с помощью Zlib.AWS :: S3 ожидает, что его данные будут потоковым объектом, то есть вы обычно загружаете файл с чем-то вроде

AWS::S3::S3Object.store('remote-filename.txt', open('local-file.txt'), 'bucket')

(Извините, если моя терминология отключена; на самом деле я мало что знаю о Ruby.Я знаю, что могу zlib-сжать файл с чем-то вроде

data = Zlib::Deflate.deflate(File.read('local-file.txt'))

, но передача data в качестве второго аргумента S3Object.store, похоже, не делает то, что я думаю.(Загрузка идет нормально, но когда я пытаюсь получить доступ к файлу через веб-браузер, он не возвращается корректно.) Как заставить Zlib дефлировать в поток, или любой другой объект, который S3Object.store хочет?

1 Ответ

1 голос
/ 10 декабря 2011

Я думал, что раньше проблема заключалась не в том, что я передавал неправильные вещи в S3Object.store, а в том, что я генерировал поток данных со сжатием zlib без заголовка, который вы обычно находите в файле .gz.В любом случае сработало следующее:

str = StringIO.new()
gz = Zlib::GzipWriter.new(str)
gz.write File.read('local-file.txt')
gz.close

AWS::S3::S3Object.store('remote-filename.txt', str.string, 'bucket')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...