2017-10-08 12 views
1

私は、マイクロコントローラに私のレールのサーバーからファイルを送信しています。マイクロコントローラは、ファイルが一度に16KBまでの大きすぎるチャンクで送信されているため、メモリが不足しています。Rails 5 - ストリームファイルのサイズを小さくしましたか?

にはどうすればS3から私が持っているStringIOオブジェクトを取得し、4KBのチャンクで要求者に送信することができますか?

私の現在の実装:

file_name = "#{version}.zip" 
firmware_file = s3(file_name).get() 
response.headers['Content-Length'] = firmware_file.body.size.to_s 
send_data firmware_file.body.read, filename: file_name 

答えて

2

Railsはあなたがリアルタイムで応答をストリームすることができますActionController::Liveモジュールを持っています。あなたの場合は、小さなチャンクを作成してクライアント(マイクロコントローラ)に送信したいので、この機能が役立つかもしれません。

Is It Live?の「ファイルシステムの監視」のセクションで、aaron pattersonがファイルシステムの変更をリアルタイムでクライアントにプッシュする方法をActionController::Liveで説明しています。

希望すると便利です。

+0

これを指摘してくれてありがとう - 私はそれを試してみる機会がなかった - 私は、ファイルからの読み込みや遅延を追加している列挙子へresponse_bodyを設定することになりました。それが外に出ないなら、私はこれを試してみるでしょう。 – pherris

関連する問題