Railsで大きいサイズのファイルの送信
これは、自分用のメモに近い。
まだ試していないが、今度試す。
座右の銘は"保留"なので。
rails(ruby)からファイルをアップロードする際に
net::HTTP::Postを使って
multipart/form-dataではなく、bodyに詰める必要があった...
そして、bodyにファイルを詰めて送っていた...
上手く動いていたのだった。
ある時2.3GBを超えるファイルをアップロードする場面があったのだ。
できるだろうと思っていたが、エラーが出た。
"Range Error: too big to convert to int "
みたいなエラーだった...
値が大きすぎてintに入らないというエラーだろう。
Rubyのintegerは、値が入る場合はfixnum
大きい場合はbignumでよしなに対応してくれると思っていた
しかし、なぜかエラーが出たのだ。なぜだ。
メモリ関係だろうか
大きいファイルをメモリに展開してしまって
bignumが確保できないということだろうか
わからなかった...
そして調べた。
値が大きすぎてintに入らないというエラーだろう。
Rubyのintegerは、値が入る場合はfixnum
大きい場合はbignumでよしなに対応してくれると思っていた
しかし、なぜかエラーが出たのだ。なぜだ。
メモリ関係だろうか
大きいファイルをメモリに展開してしまって
bignumが確保できないということだろうか
わからなかった...
そして調べた。
body_streamを使えば解決するかもしれない
require 'net/http' uri = URI.parse('http://www.example.com/index.html') post = Net::HTTP::Post.new(uri.request_uri) File.open("/path/to/test", 'rb') do |f| # 大きなファイルを扱う際にメモリ消費を少なくできる post.body_stream = f post["Content-Length"] = f.size end post.body_stream # => #<File:/path/to/test (closed)>
上手く行けば嬉しいなぁ...
追伸
できたZOY☆