Temfile ― 2010/01/14
Tempfile クラスの継承リスト: Tempfile < File < IO < Enumerable < File::Constants < Object < Kernel
であるにも関わらず、
irb(main):001:0> tempfile = Tempfile.new('basename') => #<File:xxxx> irb(main):002:0> tempfile.class => Tempfile irb(main):003:0> tempfile.kind_of? IO => false irb(main):004:0> tempfile.kind_of? File => false
になるのはどうして? 教えて偉いひと。
方法は判るけど、理由が判らない……。
Mechanizeでファイルを送信しようとした時に、Tempfileのインスタンスを渡すと どうしても Content-Type が 'multipart/form-data' にならないなあと思ったら、 これが原因だった。
具体的には、 WWW::Mechanize#post で、クエリの value に is_a?(IO) を訊いている。 ここで、value が Tempfile だと false が返って 'application/x-www-form-urlencoded' で送信されてしまう。
とりあえず、急ぎだったので、
-- if v.is_a?(IO) ++ if v.is_a?(IO) || v.is_a?(Tempfile)
な感じで逃げる。
最近のコメント