首页 > 解决方案 > 如何让rails逐块从aws s3中获取数据并将其作为pdf下载文件发送到ti浏览器?

问题描述

我对如何从 aws s3 获取文件而不将其写入文件但可能作为自动删除的临时文件有些困惑。所以我的朋友告诉我逐块缓冲流数据并将其作为可下载文件发送到浏览器。

所以这是我下载文件的代码

 def download(key)
   File.open('filename', 'wb') do |file|
    s3.get_object(bucket: 'bucket-test', key:key) do |chunk|
     send_data(chunk,:type => application/pdf, :disposition => 'inline')
    end
   end
 end

它带有关于海马的错误不能转换为字符串。我真的不明白这一点。

如何实际从aws(pdf文件)流式传输数据并将其作为可下载的pdf文件发送到浏览器?我的代码不是我想要的吗?

非常感谢你

标签: ruby-on-railsrubyamazon-s3

解决方案


只需将整个文件检索到内存中,然后将其发送出去:

response = s3.get_object(bucket: 'bucket-test', key: key)
send_data(response.body.read, type: application/pdf, disposition: 'inline')

此方法还具有重试网络错误的好处,因此它比禁用重试错误的分块方法更具弹性。


推荐阅读