繁体   English   中英

Rails 5 - 以较小的块流式传输文件?

[英]Rails 5 - stream file in smaller chunks?

我正在将文件从 Rails 服务器发送到微控制器。 微控制器内存不足,因为(我们认为)文件以太大的块发送 - 一次最多 16 kb。

如何从 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

Rails 有ActionController::Live模块,可帮助您实时流式传输响应。 在您的情况下,由于您想创建较小的块并将其发送到客户端(微控制器),此功能可能很有用。

文章Is It Live? 的“文件系统监控”部分作者:aaron Patterson 解释了如何使用ActionController::Live将文件系统的变化实时推送到客户端。

希望这有帮助!

简而言之,您需要利用ActionController::Live将响应数据流式传输到您的客户端。

由于您正在传输 zipfile,因此您可以使用优雅简单的zipline gem。 我特别喜欢这个 gem 的地方在于它支持大量可流式传输的对象类型——所以几乎任何你能想到的东西,它都会弄清楚如何在不费力的情况下流式传输它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM