あれやこれやの日々

幅広いエンジニアリング情報を掲載

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

RailsでDBに保存した画像データをブラウザで表示する。

2017年01月05日 | ブログ
さてさて、Railsで画像ファイルをアップロードし、DBに保存することに成功した次は、
保存した画像ファイルをブラウザに表示させてみた。

しかし、これが意外と不可解なのだが、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;

画像表示用コントロールメソッド: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)
send_data(tmpbin.upload_file, :type => 'image/jpeg', :disposition => 'inline')
end
end


コメント   この記事についてブログを書く
« Railsでファイルをアップロー... | トップ | 格安SIM ロケモバの神プラン... »
最新の画像もっと見る

コメントを投稿

ブログ」カテゴリの最新記事