まつもと ゆきひろです

In message "[ruby-list:37964] Re: multipart/form-dataのためのcgi.rbの修正"
    on 03/07/24, Yukihiro Matsumoto <matz / ruby-lang.org> writes:

|tempfileのこともあるのでちょっと考える必要がありますが、基本
|的な要望は理解しました。

こんな感じでどうでしょう? ちゃんと期待通り動きますか?

--- lib/cgi.rb	2 Jun 2003 04:49:46 -0000	1.52
+++ lib/cgi.rb	23 Jul 2003 16:21:03 -0000
@@ -802,3 +802,3 @@ convert string charset, and set language
           begin
-            require "stringio" if not defined? StringIO
+            require "stringio"
             body = StringIO.new
@@ -919,2 +919,3 @@ convert string charset, and set language
         boundary = $1.dup
+        @multipart = true
         @params = read_multipart(boundary, Integer(env_table['CONTENT_LENGTH']))
@@ -949,3 +950,2 @@ convert string charset, and set language
       def [](idx)
-        p caller(1)
         warn "#{caller(1)[0]}:CAUTION! cgi['key'] == cgi.params['key'][0]; if want Array, use cgi.params['key']"
@@ -966,4 +966,13 @@ convert string charset, and set language
       value = params[0]
-      value ||= ""
-      Value.new(value,params)
+      if @multipart
+        if value
+          return value
+        elsif defined? StringIO
+          StringIO.new("")
+        else
+          Tempfile.new("CGI")
+        end
+      else
+        Value.new(value || "", params)
+      end
     end
@@ -1933,2 +1942,3 @@ The hash keys are case sensitive. Ask th
     extend QueryExtension
+    @multipart = false
     if "POST" != env_table['REQUEST_METHOD']