ハセテツラボ

生涯一開発屋

RubyonRailsでファイルI/Oを走らせずにCSVを作成、圧縮してダウンロードさせる方法

without comments

長いタイトルですな。

つまり、サーバ上でファイルを作って圧縮、ダウンロードは結構簡単にできるんです。ただ、ファイル生成しちゃうとファイル名をユニークにしなきゃいけなかったり、ファイルのダウンロードが終わったら削除しなきゃいけなかったり、気分的に手間なんですよね。タイミングによってはダウンロードが開始される前に削除されちゃったりして、びっくりでした。

で、オンメモリでCSVファイル作って圧縮、ダウンロードまでしてみました。まぁメモリが安くなったからこそできる技ですよね。CSVが小さければいいけど、昔はこんなこと怖くてできなかった。

require ‘rubygems’
require ‘zipruby’

data = “a,b,c\r\nA,B,C”
Zip::Archive.open_buffer(buffer, Zip::CREATE) do |arc|
  arc.add_buffer(“download.csv”,data)
end

send_data(buffer , :type=>’application/zip’, :filename => “download.zip”, :disposition=>’attached’)

オンメモリでCSVちゅーのはどうでもよくて、ポイントはZip::Archiveのadd_bufferでしょう。ziprubyのバージョンにもよりけりなのかもしれません。今回利用したのは0.2.9です。あとはsend_fileじゃなくてsend_dataを使うあたりですかね。

 

関連性のあるエントリ:

  1. RubyonRailsでのファイルのダウンロード
  2. はじめてのAjax
  3. RubyでHTTP経由でのXMLの受信と解析
  4. RubyでZIP圧縮、パスワードも設定する
  5. C#でベーシック認証が必要なページのデータを取得する方法

Written by

4月 24th, 2009 at 12:09 pm

Posted in RubyOnRails

Tagged with ,

Leave a Reply