multipartのフォームから値を取得、ファイルUPロード

<form name="form1" method="post" action="" enctype="multipart/form-data">
で送ったときの、値の受け取り方です。


require "cgi"

form = CGI.new
id = form['id'][0].read
 

3行目に注目。
multipartの場合は「.read」をつけます。

次にファイルのアップロード


require "cgi"

form = CGI.new

#ファイル名の取得
filename = form['filename'][0].original_filename

#フォームから送られてきたファイル名が空じゃなかったらファイルに書き込み
if filename != "" then

 filename = filename[filename.rindex("\\")+1 , 100]
 open("../data/#{filename}", "w") do |fh|
  fh.binmode
  fh.write form['filename'][0].read
 end
 
end
 

上記の例は
< input type="file" name="filename">
で送った場合です。

filename = filename[filename.rindex("\\")+1 , 100]
はパス付で送られてくるファイル名をファイル名だけにしています。

例:「C:\program\photo.jpg」→「photo.jpg」