これまでRailsを使い、主にテキストデータのDB管理を行ってきたが、画像ファイル等をアップロードし管理できるとなかなか便利である。
そこで、バイナリデータをアップロードし、DBで管理する手順をまとめてみた。
作成手順の概略は以下の通り。
1)ブラウザ側機能コーディング
2)Rails側受信機能コーディング
3)DBへの保存機能コーディング
はじめに実装例のRails環境について
ブラウザ表示用ファイル:app/views/new.html.erb
DB用コントローラファイル:app/controllers/samples_controller.rb
DB用モデル名:sample
アップロード用コントロールメソッド:new
受信処理用コントロールメソッド:create
【システム構成】

1.ブラウザ側機能コーディング
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
以上。。。
そこで、バイナリデータをアップロードし、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;
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を使用する場合は%ではなく%=とする仕様に変更されている。
ここでは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
以上。。。
※コメント投稿者のブログIDはブログ作成者のみに通知されます