goo blog サービス終了のお知らせ 

あれやこれやの日々

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

Railsでファイルをアップロードする方法

2017年01月05日 | ブログ
これまでRailsを使い、主にテキストデータのDB管理を行ってきたが、画像ファイル等をアップロードし管理できるとなかなか便利である。

そこで、バイナリデータをアップロードし、DBで管理する手順をまとめてみた。

作成手順の概略は以下の通り。
1)ブラウザ側機能コーディング
2)Rails側受信機能コーディング
3)DBへの保存機能コーディング


はじめに実装例のRails環境について
ブラウザ表示用ファイル:app/views/new.html.erb
DB用コントローラファイル:app/controllers/samples_controller.rb
DB用モデル名:sample
カラム定義
t.string file_name;
t.binary upload_file;

アップロード用コントロールメソッド:new
受信処理用コントロールメソッド:create

【システム構成】


1.ブラウザ側機能コーディング
Railsでは、ブラウザでファイルを選択し、送信する機能を実現するのに便利なコマンドが用意されている。
ここではform_for のfile_fieldを使用する。
new.html.erbへの記述は以下となる。

<%= @tmp = Sample.new %>
<%= form_for @tmp, :url => {:action => 'create'} do |t| %>
<%= t.file_field :upload_file %>
<%= t.submit "送信" %>
<% end %>

※rails ver3.0からform_forを使用する場合は%ではなく%=とする仕様に変更されている。

2.Rails側受信機能コーディング

送信ボタンをクリックすると、コントローラのcreateメソッドに飛んでくる。
createメソッドでは、ブラウザから送信されたファイル情報のうち、ファイル名と
バイナリデータを取得し、DBに保存する。

ファイル名の取得方法は
params[:sample]["upload_file"].original_filename
で取得する。

ファイルのバイナリデータの取得方法は
params[:sample]["upload_file"].read
で取得する。

3.DBへの保存機能コーディング

2.で取得したファイルのバイナリデータをDBに保存する方法は
オブジェクトのsaveメソッドを使用すれば良い。

以上から、Upload Fileの受信と保存処理について
createメソッド内でのコード例は以下となる。

def create

tmp = Sample.new
tmp.file_name = params[:sample]["upload_file"].original_filename
tmp.upload_file = params[:sample]["upload_file"].read
tmp.save

end


以上。。。

最新の画像もっと見る

コメントを投稿