さてさて、Railsで画像ファイルをアップロードし、DBに保存することに成功した次は、
保存した画像ファイルをブラウザに表示させてみた。
しかし、これが意外と不可解なのだが、Railsの作法をまとめてみた。
1)ブラウザ側から表示データをリクエストする。
2)ブラウザから要求された表示データをDBから取り出し、ブラウザに送る。
3)プラウザで送られた画像データを表示する。
ここで実装例のRails環境について
ブラウザ表示用ファイル:app/views/show.html.erb
DB用コントローラファイル:app/controllers/samples_controller.rb
DB用モデル名:sample
画像表示用コントロールメソッド:show
画像送信処理用コントロールメソッド:send_img
【システム構成】
1.ブラウザ側から表示データをリクエストする
HTMLで画像表示する場合は、img src を使用し、サーバー側の画像ファイルを指定する。
基本的には同じだが、DBに保存された画像データを表示する場合は、アクションを指定し、アクション内で表示データを送信することになる。
railsではimg_tagを使用、show.html.erb内の表示部コードは以下の様に記述する。
<%= image_tag(url_for(:controller => 'samples', :action => 'send_img', :id => 1), :size => '100x100') %>
例ではSampleのID=1の画像データを要求、表示している。
HTMLで記述すると
img src="/samples/send_img?id=1" width="100" height="100"
と同じになる。
この1行で1.と3.の処理を記述したことになる。
2.ブラウザから要求された表示データをDBから取り出し、ブラウザに送る。
ブラウザからの画像データ送信要求を実行するメソッドsend_imgでは、DBから画像データを読み出し、ブラウザへsend_data()を使って送信する。
コード例は以下となる。
def send_img
保存した画像ファイルをブラウザに表示させてみた。
しかし、これが意外と不可解なのだが、Railsの作法をまとめてみた。
1)ブラウザ側から表示データをリクエストする。
2)ブラウザから要求された表示データをDBから取り出し、ブラウザに送る。
3)プラウザで送られた画像データを表示する。
ここで実装例のRails環境について
ブラウザ表示用ファイル:app/views/show.html.erb
DB用コントローラファイル:app/controllers/samples_controller.rb
DB用モデル名:sample
カラム定義
t.string file_name;
t.binary upload_file;
t.string file_name;
t.binary upload_file;
画像表示用コントロールメソッド:show
画像送信処理用コントロールメソッド:send_img
【システム構成】
1.ブラウザ側から表示データをリクエストする
HTMLで画像表示する場合は、img src を使用し、サーバー側の画像ファイルを指定する。
基本的には同じだが、DBに保存された画像データを表示する場合は、アクションを指定し、アクション内で表示データを送信することになる。
railsではimg_tagを使用、show.html.erb内の表示部コードは以下の様に記述する。
<%= image_tag(url_for(:controller => 'samples', :action => 'send_img', :id => 1), :size => '100x100') %>
例ではSampleのID=1の画像データを要求、表示している。
HTMLで記述すると
img src="/samples/send_img?id=1" width="100" height="100"
と同じになる。
この1行で1.と3.の処理を記述したことになる。
2.ブラウザから要求された表示データをDBから取り出し、ブラウザに送る。
ブラウザからの画像データ送信要求を実行するメソッドsend_imgでは、DBから画像データを読み出し、ブラウザへsend_data()を使って送信する。
コード例は以下となる。
def send_img
tmpbin = Sample.find(params[:id])
if (1 <= tmpbin.upload_file.size)
endif (1 <= tmpbin.upload_file.size)
send_data(tmpbin.upload_file, :type => 'image/jpeg', :disposition => 'inline')
end