Ruby on Rails AWS S3 Download URL



如何为用户形成网址链接,以便在用户单击链接时强制他们下载 AWS S3 对象?

我已经看到了以下两种解决方案:使用 send_file 从 Amazon S3 下载文件?和使用send_file从 Amazon S3 下载文件?但是,它们似乎引用了旧的 AWS S3 v1 开发工具包,并且 v2 AWS S3 开发工具包中似乎没有url_for。

谢谢。

最终使用以下代码片段来解决。 希望这对其他人有所帮助。

presigner = Aws::S3::Presigner.new
    url = presigner.presigned_url(:get_object, #method
                    bucket: ENV['S3_BUCKET'], #name of the bucket
                    key: s3_key, #key name
                    expires_in: 7.days.to_i, #time should be in seconds
                    response_content_disposition: "attachment; filename="#{filename}""
                    ).to_s

这是我得到的:

def user_download_url(s3_filename, download_filename=nil)
  s3_filename = s3_filename.to_s # converts pathnames to string
  download_filename ||= s3_filename.split('/').last
  url_options = {
    expires_in:                   60.minutes,
    response_content_disposition: "attachment; filename="#{download_filename}""
  }
  object = bucket.object(s3_filename)
  object.exists? ? object.presigned_url(:get, url_options).to_s : nil
end
def bucket
  @bucket ||= Aws::S3::Resource.new(region: ENV['AWS_REGION']).bucket(ENV['AWS_S3_BUCKET'])
end

若要创建用于下载的链接,只需将redirect_to user_download_url(s3_file_path)放入控制器操作中,然后创建指向该控制器操作的链接。

最新更新