インストール
% sudo gem1.8 install zipruby
Railsのプロジェクトトップ下にあるGemfileに以下を追加。
gem 'zipruby'
bundleで反映。
% bundle install --local --without production (開発環境) % bundle install --local --without development(公開環境)
app/views/posters/show.html.erb の出力結果をダウンロードさせるとする。このとき、スタイルシートも一緒にダウンロードしないと見栄えがわるい。スタイルシートが public/stylesheets/main.css であるとき、app/views/layouts/download.html.erb を用意し、ヘッダのスタイルシート部分を以下のようにする。
<link href="main.css" media="screen" rel="stylesheet" type="text/css" />
tmp/downloads以下にダウンロードさせるファイルを生成するとする。app/controller/posters_controller.rb に アクション download_zipを加える。
def download_zip 〜 処理省略 〜 prefix = "show-#{params[:id]}" action = 'show' zipfilename = generate_statichtml_in_zip(action, prefix) send_file(zipfilename, {:type => 'application/zip', :filename => "#{prefix}.zip"}) end private def generate_statichtml_in_zip(action, prefix) path = "#{Rails.root}/tmp/downloads/" zipfilename = path+prefix+".zip" htmlname = prefix+'/'+prefix+".html" stylesheet_file = "#{Rails.root}/public/stylesheets/main.css" zip_stylesheet_file = prefix+'/main.css' if File.exist?(zipfilename) File.unlink(zipfilename) end Zip::Archive.open(zipfilename, Zip::CREATE) do |ar| ar.add_dir(prefix) ar.add_buffer(htmlname, render_to_string(:action => "#{action}",:layout => "storeable")) ar.add_file(zip_stylesheet_file, stylesheet_file) end return zipfilename end
download_zipのアクションを呼び出すとzipファイルがダウンロードされる。