Edited at

OpenURIで10KB以下のファイルが開けないよ

More than 1 year has passed since last update.

undefined method 'path' for #<StringIO...に遭遇したため、解決した過程の忘備録です。

RubyでURLから画像などのファイルを開く場合、

OpenURI.open_uri('ファイルのURL')

で大抵は開けます。

で、この戻り値はTempfileになるわけですが、ファイルが10kb以下だった場合にはStringIOになっちゃうみたいです。

この10kbという数字はOpenURI::BufferStringMaxという定数で定義されています。

Class: OpenURI::Buffer

なので、これを一時的に上書きすれば10kb以下のファイルでも対応できそうです。

OpenURI::Buffer.send('const_set', :StringMax, 0)

file = OpenURI.open_uri('10kb以下のファイルのURL')
file.class # => Tempfile

これで開くことができました。