WEBrickでアップロードされたファイルを保存する

思いつきでRubyをすこしつまみ食いしてみました。Ruby初体験です。
Ruby+WEBrickをチョコチョコといじる過程でアップロードされたファイルを保存するサーブレットを作ってみました。意外と用途はありそうなんですがサンプルがぜんぜん見つからなかったので同じようなことやりたい人向けに公開しておきます。(探し方が悪い可能性は否めませんが…)
ただRuby歴1日の人が書いたコードなので「お作法」に従ってない可能性がありますが、その点ご了承ください。むしろ指摘していただければ助かります。f(^^;)

uploader.rb

require 'webrick'

class Uploader < WEBrick::HTTPServlet::AbstractServlet
    def do_POST(request, response)
        print 'HTTP Method: POST', "\n"
        print 'HTTP Content-Type: ', request.query['uploadedFile']['content-type'], "\n"
        print 'File name: ', request.query['uploadedFile'].filename, "\n"
        print 'Data size: ', request.query['uploadedFile'].to_s.size, "\n"
        
        filename = request.query['uploadedFile'].filename
        uploadedFile = File.open(filename, "wb")
        uploadedFile.write request.query['uploadedFile'].to_s
        uploadedFile.close
    end
    
    def do_GET(request, response)
        print 'HTTP Method: GET', "\n"
    end
end

上記のrbファイルをサーブレットとしてHTTPサーバにマッピングしたら受け側は準備完了です。下記コードでは /upload をマッピング先としました。またアップロードされたファイルは元のファイル名でカレントディレクトリに保存されます。(本当はドキュメントルートのパスをHTTPServerのインスタンスから取得してそこに配置するようにしたかったのですが、やり方がわかりませんでした。)
httpserver.rb

require 'webrick'
include WEBrick

server = HTTPServer.new(
    :Port => 8000,
    :DocumentRoot => File.join(Dir::pwd, "public_html")
)
trap("INT"){ server.shutdown }

require 'uploader'
server.mount('/upload', Uploader)

server.start

あとは以下のような形でformタグを書いてアップロードするフォームを用意したHTMLファイルをpublic_htmlにでも入れておけばそこからアップロードできるようになります。

<form method="POST" action="/upload" enctype="multipart/form-data">
    <div>
        アップロードするファイル:
        <input type="file" name="uploadedFile" size="100"/>
    </div>
    <input type="submit" value="アップロード"/>
    <input type="reset" value="取消"/>
</form>