インストール
% 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
enddownload_zipのアクションを呼び出すとzipファイルがダウンロードされる。