Feature #600
closed
cgi.rbのマルチパートフォームの受信は1.8との互換性が低い
Added by xibbar (Takeyuki FUJIOKA) about 16 years ago.
Updated over 13 years ago.
Description
=begin
see: [ruby-dev:36450]
MorphingBodyがインターフェースが1.8と大分変わっていて、
互換性がなくなっています。
現状は大分使いづらいです。
しかし、1.8のcgi.rbのマルチパートの受信データはすべて
StringIOかTempfileというのも使いづらいと思います。
そのため、マルチパートもファイル以外の項目は
String型にして、それにreadの特異メソッドをつけてあげるのが
いいのではないかと思っています。
cgi['title'] #=> #StringIO:0x3f9fbc
cgi['title'].read #=> "タイトル"
となっているのを
cgi['title'] #=> "タイトル"
cgi['title'].read #=> "タイトル"
とすると、ある程度互換性を保ちつつ、
使いやすいものになるのではないかと思っています。
ファイルの場合はこれまで通り、StringIOかTempfileがいいと思います。
ご意見をいただければと思います。
=end
- Target version set to 1.9.1 Release Candidate
=begin
cgi['title'] #=> #StringIO:0x3f9fbc
cgi['title'].read #=> "タイトル"
となっているのを
cgi['title'] #=> "タイトル"
cgi['title'].read #=> "タイトル"
とすると、ある程度互換性を保ちつつ、
使いやすいものになるのではないかと思っています。
ファイルの場合はこれまで通り、StringIOかTempfileがいいと思います。
特に異論がないようなので、今日コミットします。
ファイルではないもの(つまり、original_filenameがないもの)は
Stringで受け取れるようにして、
特異メソッドでread、original_filename、content_typeをつけます。
=end
=begin
特異メソッドでread、original_filename、content_typeをつけます。
ファイルか否かを respond_to?(:original_filename) で判断しているプログラムがあるので、すべてに特異メソッドをつけられると少し困ります。
ファイルか否かの判定法は original_filename が偽を返す?
=end
=begin
ファイルか否かを respond_to?(:original_filename) で判断しているプログラムがあるので、すべてに特異メソッドをつけられると少し困ります。
ファイルか否かの判定法は original_filename が偽を返す?
現在の1.8のcgi.rbはマルチパートを受け取った時に
ファイルでないもののoriginal_filenameの中身は""のようです。
つまり、マルチパートの受け取りでは
すべての項目でtrueになってしまうと思います。
マルチパートかどうかの判別と勘違いしていたりしませんでしょうか?
=end
=begin
勘違いです。
mutipartを予期しているプログラムに x-www-form-urlencoded をPOSTすると NameError、なんてのを防ぐために色々チェックしているのが bad know-how 化しているので、ごっちゃになってしまったんだと思います。
Perlの CGI.pm では 2.47 から $cgi->upload('name') というメソッドがあり、アップロードファイルだけ分けて取ってこれるので、CGI#upload のような追加メソッドがあると嬉しいのかも。
=end
=begin
CGI#filesというのを用意しようと思っていました。
=end
- Status changed from Open to Closed
- % Done changed from 0 to 100
=begin
Applied in changeset r19906.
=end
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0Like0