multipart/form-dataのデータを取り出す
画像などのファイルをアップロードできるCGIを作成する場合の書き方。
基本はここのように書けばよい。
常識なのかもしれないが、入力パラメータをファイルと同時にPOSTする場合も、同じ取り出し方をしなければならない、ということに気づかなくてしばらく悩んだ。
つまり、以下のようなフォームで値を取り出す場合(デフォルト)とは異なる、ということ。
デフォルト(application/x-www-form-urlencoded)
<form action="./hoge.rb" method="POST"> <input type="text" name="param0"/> <input type="submit" value="送信"/> </form>
hoge.rbでの値の取り出し方は、
require 'cgi' input = CGI.new param0 = input['param0']
ファイルをアップロードする場合(multipart/form-data)
<form action="./hoge.rb" method="POST" enctype="multipart/form-data"> <input type="text" name="param0"/> <input type="file" name="file0"/> <input type="submit" value="送信"/> </form>
この場合は、
require 'cgi' input = CGI.new.params param0 = input['param0'][0].read file0 = input['file0'][0].read
として、パラメータもファイルデータも取り出す。
そのときのオブジェクトの型は、TmpFileオブジェクト(1024バイト未満の場合はStringIOオブジェクト)となる