rubyのCGIで、アップロードされたファイルを読み込む方法の備忘録です。
cgi = CGI.new
file = cgi.params['file_name'][0]
file でアップロードされたファイルのデータを扱うことができます。
アップロードされたファイルのサイズが 10240 バイト未満の場合には、StringIO、10240 バイト以上の場合には Tempfile のオブジェクトになります。
もし、両方とも Tempfile で扱いたい場合には、以下のようにして StringIO のデータをTempfile に書き込んでしまえばよいでしょう。
if file.class == StringIO
tf = Tempfile.new
tf.print(file_data.read)
tf.rewind
file = tf
end
cgi = CGI.new
file = cgi.params['file_name'][0]
file でアップロードされたファイルのデータを扱うことができます。
アップロードされたファイルのサイズが 10240 バイト未満の場合には、StringIO、10240 バイト以上の場合には Tempfile のオブジェクトになります。
もし、両方とも Tempfile で扱いたい場合には、以下のようにして StringIO のデータをTempfile に書き込んでしまえばよいでしょう。
if file.class == StringIO
tf = Tempfile.new
tf.print(file_data.read)
tf.rewind
file = tf
end