我想为用户提供一个链接,以便在我的 Rails 应用程序中从 Amazon S3 下载非公开文件。这不是用户上传的文件,只是我上传的一个文件,任何登录的人都应该能够下载。
我迷失在 S3 文档/参数/语法中。就像失去了几个小时。以下是非公开文件的 Amazon 网址:https://s3-us-west-1.amazonaws.com/physicianneedtool/static/Historical_Payer_Profile.xlsx 。 S3_BUCKET、S3_KEY、S3_SECRET_KEY 和 S3_REGION 变量已经适用于我在应用程序中的载波设置,因此我知道它们很好。
我当前的非工作代码:
s3 = Aws::S3::Resource.new(region: ENV["S3_REGION"],
access_key_id: ENV["S3_KEY"],
secret_access_key: ENV["S3_SECRET_KEY"])
@file_url = s3.bucket(ENV["S3_BUCKET"])
.object('Historical_Payer_Profile.xlsx')
.get(response_target: 'static/Historical_Payer_Profile.xlsx')
我收到的错误是 Aws::S3::Errors::NoSuchKey。在rails控制台中,我发现 s3.bucket(ENV["S3_BUCKET"]).object('Historical_Payer_Profile.xlsx') 返回一个看似有效的S3对象,因此看起来错误是由最后的 .get 调用引起的。我在那里做错了什么?为response_target指定的路径是我从S3控制台中的复制路径按钮获取的确切路径。
最佳答案
您可以使用Aws::S3::Presigner ,它允许您创建预签名 URL 来共享/下载私有(private)文件,并且您可以使该 URL 在一段时间后过期。
presigner = Aws::S3::Presigner.new
presigner.presigned_url(
:get_object,
bucket: ENV['S3_BUCKET'],
key: ENV['S3_KEY'],
expires_in: 1.day.to_i
).to_s
关于ruby-on-rails - 如何在rails中链接单个私有(private)S3文件以供下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48479642/