From: Wakou Aoyama Date: 1999-06-03T15:53:13+09:00 Subject: [ruby-list:14761] CGI.rb 青山です。 Ruby 1.3 向けという事で ruby-dev でアナウンスした CGI.rb ですが、こち らでも Ruby 1.3 解禁という事で(そして、dev で特に仕様変更等の要望が上 がらなかったので)、仕様変更は無しで multipart form 対応の追加を行った 新版の公開です。(in.coming に入れて置きました。よろしくお願いします。) CGI.rb の cgi-lib.rb, CGI.pm との違いは ruby-dev でアナウンスを行った 時のを次の所あたりで参照して下さい。 http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/~poffice/mail/ruby-dev/6982 Version 0.20 の追加点 multipart form 対応。 require "CGI" query = CGI.new html = CGI.new("html3") CGI::print{ html.multipart_form{ html.file_field("field_name") + html.submit } + if query.include?("field_name") html.pre{ "original_filename --> " + query["field_name"][0].original_filename + "\n" + "local_path --> " + query["field_name"][0].local_path + "\n" + "local_file_size --> " + query["field_name"][0].stat.size.to_s + "\n" + "content_type --> " + query["field_name"][0].content_type + "\n" + query["field_name"][0].read } else "" end } 最小のサンプルはこんな感じでしょうか。動作確認は主に Linux 版の Netscape を利用して行いましたが、その他、以下のブラウザで少しチェック を行いました。 Mozilla/4.04 [muriyari-ja] (X11; I; Linux 2.2.7 i586; Nav) Mozilla/4.5 [ja] (Win95; I) Mozilla/4.0 (compatible; MSIE 4.01; Windows 95) Mozilla/4.5 (Macintosh; I; PPC) Mozilla/4.0 (compatible; MSIE 4.5; Mac_PowerPC) Mac 版の MSIE で boundary の扱いが少し違っていた以外は致命的な差はあり ませんでしたが、Mac 版の Netscape は filename を url エンコードしてい たので、自動デコードするようにしました。Mac の MSIE 以外の Mozilla と して判定していますが、もし 4.5 というバージョンや PPC 等にも依存するよ うな事があれば、お知らせして頂ければありがたいです。 また、Windows については filename をフルパスで返すようです。これは自動 で削除して他のプラットホームに合わせた方が扱いやすそうですが、勝手に削 除するのもかえって不親切かもしれないので、とりあえずそのままにしてあり ます。この件についても利用者のみなさんのご意見を伺えるとありがたいです。 最後に、やはり結構面倒なのが Mac です。以下、Mac のファイルとは無関係 な方は読み飛ばして下さい。 まず、Netscape はデータフォークのみをアップします。これはテキストや画 像データをアップする場合等にはサーバー側でそのまま利用できるので便利で す。しかし、アプリケーションやリソースフォークも必要なデータファイルの 場合は、ファイルが壊れるという事になります。 もっとも、そのようなデータを生でアップする必要性というのはほとんど無い でしょうから、この場合には一度アーカイブし、それをアップするという事で 対応するのが良いでしょう。 次に、MSIE ですが、こちらは MacBinary をアップします。user_agent で MSIE を判定せずとも、content_type で確認できます。 MacBinary でアップされるため、そのまま別ディレクトリ等に移動して公開す るには便利ですが、一方、テキストや画像データの場合は、適当なツール(確 か、Debian 等にもあったような)でデータフォークを取り出してやる必要があ ります。 まあ、とりあえず、通常は Netscape でアップしてもらうのが簡単そうですね。 -- 青山 和光 Wakou Aoyama