ファイルアップロード
Railsでファイルをアップロードする方法。他の言語より格段に簡単!
HTTPファイルアップロードのFORMは、次のerubyコードで生成できます。
<%= form_tag({:action => 'store_pics'}, :multipart => true) %>
ファイルを選んでください:<%= file_field( :upload, 'file') %>
<%= submit_tag('upload') %>
<%= end_form_tag %>
このコードは、次のHTMLに変換されます。
<form action="/app_path/store_pics"
enctype="multipart/form-data" method="post">
ファイルを選んでください:
<input id="upload_file" name="upload[file]" size="30" type="file" />
<input name="commit" type="submit" value="upload" />
</form>
この「enctype="multipart/form-data"」がいつも思い出せずに、コトある毎に調べなおしたりしませんか?(おれだけか)
それをRailsでは「:multipart => true」と、直感的な表現に置きかえてくれてます。実にありがたい。
送信ファイルを受け取るアクションは、
def store_pics
uploaded = params[:upload]
store_path = "/storepath/" + uploaded['file'].original_filename
File.open( store_path, "wb") { |f| f.write( uploaded['file'].read ) }
end
他にも、MIME_TYPEを取り出したければ、
uploaded['file'].content_type
などがあります。
もちろん、複数ファイルや文字列などを同時に送信することもできます。
JavaだとCommons FileUploadとかありますが、そういう追加ライブラリは一切なしで、multipartの解析をやってくれます。
楽だー。

