もっともシンプルなアップローダ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等はいらなさそうです。