2011-12-09 50 views
0

我試圖使用AWS::S3將文件上傳到Amazon S3,但我想先用Zlib壓縮它們。 AWS :: S3預計其數據是一個流對象,也就是你通常會上傳文件的東西,如如何讓Zlib壓縮成Ruby中的流?

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似乎並沒有做什麼,我認爲它。 (上傳沒問題,但是當我嘗試從Web瀏覽器訪問該文件時,它無法正確回放。)我如何讓Zlib泄放到某個流或任何類型的對象S3Object.store想要的?

回答

1

我認爲我之前的問題並不是我將錯誤的東西傳遞給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')