如何使用Ruby aws/s3 Gem生成从s3下载文件的安全URL

LFo*_*s24 5 ruby url amazon-s3 amazon-web-services

我正在编写一个小脚本来在aws上的存储桶中找到特定文件,并创建一个临时验证的URL以发送给同事.(理想情况下,这会产生类似于右键单击控制台上的存储桶中的文件并复制链接地址的结果).

我已经研究过paperclip,它似乎不符合这个标准,但是我可能不知道它的全部功能.

我尝试了以下方法:

def authenticated_url(file_name, bucket)
  AWS::S3::S3Object.url_for(file_name, bucket, :secure => true, :expires => 20*60)
end
Run Code Online (Sandbox Code Playgroud)

产生了这种结果:

...- 1.amazonaws.com/file_path/file.zip.AWSAccessKeyId={key}Expires=1200&Signature = {...}

有没有办法创建一个更类似于上述场景的安全URL,可以简单地作为链接发送?如果没有,任何安全的替代品都会受到欢迎.

Nic*_*ick 8

你需要什么称为"标记化链接".幸运的是,它内置于您正在使用的aws-sdk gem中.

以下是您可以使用的解决方案的先前问题:

如何在S3中存储数据并允许用户使用rails API/iOS客户端以安全的方式访问?

但是,这是一个Rails解决方案,它具有花哨的Rails时间助手20.minutes.from_now.您可以通过向当前时间添加特定秒数来将到期日期设置为特定日期Time.now.to_i + (20 * 60),或者将ActiveSupport时间助手包含在您的ruby脚本中require 'active_support/core_ext/numeric/time'.这将允许这些20.minutes.from_now东西工作.

此外,您将需要整个aws-sdk宝石,而不仅仅是S3部分.