[英]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.