[ruby] データから zip を直接作る

 先日仕事でエクスポートしたデータを zip ファイルにしてAmazon S3にアップロードするタスクがふられた。
 エクスポートと言ってもファイルに書き出すわけでは無いので、ファイルとして実態のないデータを zip ファイルにする必要があった。

 よく見かけるサンプルとしては

require 'rubygems'
require 'zip'

Zip::File.open("zipfile_name.zip", Zip::File::CREATE) do |zip_file|
  zip_file.add(File.basename("hoge/data.dat"), "hoge/data.dat")
end

 こんな感じで実ファイルをzipファイルに追加するコードですね

 今回は実ファイルが無いのでこの方法が取れません。
 一度データをファイルに書き出してやってもいいんですが、読み/書き時のトラブルなどが増え、実装コストが上がるので避けます。

 ちょいと調べてみたらgithubにget_output_streamメソッドを呼べばいいみたいなサンプルが書いてあったので実装してみた。

require 'rubygems'
require 'zip'

io = Zip::File.open("zipfile_name.zip", Zip::File::CREATE)
io.get_output_stream("hoge/data.dat") do |file|
  file.print "body"
end
io.close

こんなコードでうまくいきました。

RSS / feedly
  • follow us in feedly
  • follow us in feedly
ソーシャル
広告