Feature #600

cgi.rbのマルチパートフォームの受信は1.8との互換性が低い

Added by Takeyuki FUJIOKA almost 7 years ago. Updated about 4 years ago.

[ruby-dev:36547]
Status:Closed
Priority:Normal
Assignee:Takeyuki FUJIOKA

Description

=begin
see:
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

History

#1 Updated by Yuki Sonoda almost 7 years ago

  • Target version set to 1.9.1 Release Candidate

=begin

=end

#2 Updated by Takeyuki FUJIOKA almost 7 years ago

=begin

cgi['title'] #=> #StringIO:0x3f9fbc
cgi['title'].read #=> "タイトル"
となっているのを
cgi['title'] #=> "タイトル"
cgi['title'].read #=> "タイトル"
とすると、ある程度互換性を保ちつつ、
使いやすいものになるのではないかと思っています。
ファイルの場合はこれまで通り、StringIOかTempfileがいいと思います。

特に異論がないようなので、今日コミットします。
ファイルではないもの(つまり、original_filenameがないもの)は
Stringで受け取れるようにして、
特異メソッドでread、original_filename、content_typeをつけます。
=end

#3 Updated by Toru Iwase almost 7 years ago

=begin

特異メソッドでread、original_filename、content_typeをつけます。

ファイルか否かを respond_to?(:original_filename) で判断しているプログラムがあるので、すべてに特異メソッドをつけられると少し困ります。

ファイルか否かの判定法は original_filename が偽を返す?
=end

#4 Updated by Takeyuki FUJIOKA almost 7 years ago

=begin

ファイルか否かを respond_to?(:original_filename) で判断しているプログラムがあるので、すべてに特異メソッドをつけられると少し困ります。
ファイルか否かの判定法は original_filename が偽を返す?

現在の1.8のcgi.rbはマルチパートを受け取った時に
ファイルでないもののoriginal_filenameの中身は""のようです。
つまり、マルチパートの受け取りでは
すべての項目でtrueになってしまうと思います。
マルチパートかどうかの判別と勘違いしていたりしませんでしょうか?
=end

#5 Updated by Toru Iwase almost 7 years ago

=begin
勘違いです。
mutipartを予期しているプログラムに x-www-form-urlencoded をPOSTすると NameError、なんてのを防ぐために色々チェックしているのが bad know-how 化しているので、ごっちゃになってしまったんだと思います。

Perlの CGI.pm では 2.47 から $cgi->upload('name') というメソッドがあり、アップロードファイルだけ分けて取ってこれるので、CGI#upload のような追加メソッドがあると嬉しいのかも。

=end

#6 Updated by Takeyuki FUJIOKA almost 7 years ago

=begin
CGI#filesというのを用意しようと思っていました。
=end

#7 Updated by Takeyuki FUJIOKA almost 7 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
Applied in changeset r19906.
=end

Also available in: Atom PDF