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☆