我正在从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
答案 0 :(得分:2)
Rails有ActionController::Live模块,可以帮助您实时传输响应。在您的情况下,由于您希望创建较小的块并将其发送到客户端(微控制器),因此该功能可能很有用。
aaron patterson撰写的文章Is It Live?中的“文件系统监控”部分解释了如何使用ActionController::Live
实时将文件系统中的更改推送到客户端。
希望这有帮助!
答案 1 :(得分:0)
简而言之,您需要利用ActionController::Live
才能将响应数据流式传输到您的客户端。
由于您正在传输zip文件,因此可以使用优雅的zipline
gem。我特别喜欢这个gem的地方是它支持a large number of streamable object types-因此,您可以想到的任何东西都可以使用它,它将找出如何在无需您花费太多精力的情况下进行流式处理。