我正在编写一个小脚本来在aws上的存储桶中找到特定文件,并创建一个临时验证的URL以发送给同事。 (理想情况下,这会产生类似于右键单击控制台上的存储桶中的文件并复制链接地址的结果)。
我已经研究过paperclip,它似乎不符合这个标准,但是我可能不知道它的全部功能。
我尝试了以下内容:
def authenticated_url(file_name, bucket) AWS::S3::S3Object.url_for(file_name, bucket, :secure => true, :expires => 20*60) end
产生了这种结果:
...- 1.amazonaws.com/file_path/file.zip.AWSAccessKeyId={key}Expires=1200&Signature = {...}
有没有办法创建一个更类似于上述场景的安全网址,可以简单地将其作为链接发送?如果没有,任何安全的替代品都会受到欢迎。
答案 0 :(得分:8)
您需要什么称为“标记链接”。幸运的是,它内置于你正在使用的aws-sdk gem中。
以下是您可以使用的解决方案的先前问题:
How to store data in S3 and allow user access in a secure way with rails API / iOS client?
然而,这是一个Rails解决方案,它有像20.minutes.from_now
这样的花哨的Rails时间助手。您可以通过向当前时间添加特定秒数(例如Time.now.to_i + (20 * 60)
)将到期日期设置为特定日期,或者将ActiveSupport时间助手添加到带有require 'active_support/core_ext/numeric/time'
的ruby脚本中。这将允许20.minutes.from_now
内容工作。
此外,您需要整个aws-sdk
宝石,而不仅仅是S3部分。