プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
Ruby on Rails3、ファイルのダウンロード
Railsさんでのファイルのダウンロード方法を調べてみましたよっと。

ふむふむ、なるほど(--)

「send_file」か「send_data」を使えば良いそうです。
おぉ、わりと簡単そう。

と言う訳でちょちょいのちょいとサンプル作ってみました。
「Rails.root + 'tmp/files/hoge.csv'」を「aaa.csv」として
ダウンロードするサンプルです(--)b

まずは「send_file」を使う方φ(--)

def download
    @filepath = Rails.root + 'tmp/files/hoge.csv';
    send_file(@filepath,
        :type => 'text/csv',
#            :disposition => 'inline',
            :disposition => 'attachment',
            :filename => "aaa.csv",
            :status => 200)
end

次に「send_data」を使う方φ(--)

def download2
    @filepath = Rails.root + 'tmp/files/hoge.csv';
    File.open(@filepath, 'rb') do |of|
        @filedata = of.read()
    end

    send_data(@filedata,
        :type => 'text/csv',
#            :disposition => 'inline',
            :disposition => 'attachment',
            :filename => "aaa.csv",
            :status => 200)
end

「send_file」と「send_data」の違いは
「send_file」がファイルをダウンロードさせるのに対し
「send_data」はデータをダウンロードさせます。

ってそのまんまだな。
サンプルで言えば「send_file」では「hoge.csv」を
そのままダウンロードさせているのに対し、
「send_data」は「hoge.csv」の『中身』をダウンロードさせています。

だからプログラム内で動的に作成したデータをダウンロードさせる場合は
「send_data」の方が良いんじゃないですかね。
既に存在する静的ファイルをダウンロードさせる場合は
「send_file」で良いと思います。

あとついでなんでオプションはこんな感じφ(--)

type → コンテントタイプ
disposition → ファイルをダウンロードするかブラウザ内に表示するか。
        'attachment' or 'inline'。
filename → 出力ファイル名
status → HTTPステータスコード

完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:Ruby on Rails  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事