もっともシンプルなアップローダCGI

「そういえば、アップローダってどういうCGIなの?」と、ちょっと考えて、ちょっと調べて、ちょっと書いてみた。rubyで。
こういうのがあると、ちょっとしたデータのやりとりに便利だし、いいかもしれない。
実際に動作したコードを公開。
ただし、以下のコードは、セキュリティに関する思考はゼロなので、使用するときには注意してください。

<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>uploader</title>
</head>

<body>
<form action="./fu.cgi" method="POST" enctype="multipart/form-data">
<input type="FILE" name="up_fname" size="30">
<input type="submit" value="送信">
</form>
</body>

</html>
#!ruby

# fu.cgi
#
# 超シンプルなアップローダ.
#
# ### 実際に使うときに修正する場所 ### #
# - 1行目のrubyへのパス.
# - file_nameに書いている保存先のパス.
# - 本当はLockとか使った方がいい.
# - エラー処理をきちんと.
# - スパム対策を何か.

require "cgi"
cgi = CGI.new

print "Content-type: text/html\n\n"
print "<html><body>"

# 保存先のファイル名を生成.
file_name = "./" +
  cgi['up_fname'].original_filename.split(/(\\|\/)/)[-1]

open(file_name, "w") {|f|
  print "<p>write to[" + file_name + "]</p>"
  
  f.binmode
  f.write cgi['up_fname'].read
}

print "</body></html>"

ちなみに、ruby 1.8では、original_filenameがパス無しのファイル名なので、file_nameの最後に処理しているsplit等はいらなさそうです。