トップ
ゲーム
Nintendo Online
スプラトゥーン3
マリラビ 2
マリオテニスACE
スマブラSP
モンハンライズ
A列車で行こう
ピクミン3DX
スーパーマリオ3Dコレクション
マキブon
ニンジャラ

ナンプレ
不定期ナンプレ
毎週ナンプレ

リンク集
ピクミンリンク集
YouTuber紹介

プログラム
html/css
Rails
JavaScript
android開発

日記
たけし日記

たけし伝説!!
● 記事 ●

railsで大きいサイズのファイルの送信

更新日2023/03/17 投稿日2023/03/17

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が確保できないということだろうか
わからなかった...

そして調べた。

body_streamを使えば解決するかもしれない


もう一度言う
今度試す、座右の銘は"保留"だ

ここに持ってきたサンプルコードを載せておく
試す未来の自分のために...
Rubyリファレンスマニュアル

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)>

上手く行けば嬉しいなぁ...

追伸 { character: takeshi, position: left, face: normal.png, baloon: normal }
できたZOY☆
コメント

コメントがありません。


おなまえ