我是RoR的新手。
我正在创建一个小应用程序,用于从s3存储桶上传,删除和下载mp3对象。 (使用aws-sdk gem)。
我无法创建合适的下载控制器。我的应用程序正在下载一个名为download的文本文件,其中包含来自s3的对象引用(Aws :: S3 :: Object:0x007feb59782368)。
所有帮助将不胜感激!
这是我的代码:
controller>
def download
bucket = S3.bucket(S3_BUCKET.name)
obj = bucket.object(params[:song])
byebug
send_data obj
end
查看>
<%= link_to "download", "songs/download/?song=" + song.name %>
来自byebug的回复:
(byebug) send_data obj
Rendering text template
Rendered text template (0.0ms)
Sent data (2.2ms)
"#<Aws::S3::Object:0x007fc3b1323c60>"
(byebug)
答案 0 :(得分:0)
尝试使用send_file
代替send_data
答案 1 :(得分:0)
我考虑将HTTP 302发送到S3网址并让客户端直接从S3下载对象。通过让您的应用服务器代理响应,这意味着您的rails应用程序进程将被绑定,同时它们从s3缓冲对象,然后必须将其发送到管道。如果安全性(并且不想公开s3对象publicliy)是一个问题,那么将它们保密,并生成一个签名的URL到具有短期到期日期的对象。
答案 2 :(得分:0)
最简单的选择是创建一个包含文件源的链接。当他们点击该链接时,它将以新的方式打开并从S3自动下载。
另一种选择是使用下载功能,但我还没有阅读文档。