【问题标题】:Does Amazon S3 help anything in this case?在这种情况下,Amazon S3 有什么帮助吗?
【发布时间】:2011-08-15 11:56:23
【问题描述】:

我正在考虑是否在 S3 上而不是在本地托管上传的媒体文件(视频和音频)。我需要检查用户对每次下载的权限。

所以会有像get_file这样的操作,它首先检查用户的权限,然后从 S3 获取文件并使用 send_file 将其发送给用户。

def get_file
  if @user.can_download(params[:file_id])
    # first, download the file from S3 and then send it to the user using send_file
  end
end

但在这种情况下,服务器(不必要地)首先从 S3 下载文件,然后将其发送给用户。我认为 S3 的用例是绕过 Rails/HTTP 服务器堆栈以减少负载。

我想错了吗?

附言。我正在使用 CarrierWave 进行文件上传。不确定这是否相关。

【问题讨论】:

    标签: ruby-on-rails-3 authentication amazon-s3 carrierwave sendfile


    【解决方案1】:

    Amazon S3 提供了一种称为 RESTful 身份验证读取的功能,它基本上是指向其他受保护内容的可超时 URL。

    CarrierWave 对此提供支持。只需将 S3 访问策略声明为经过身份验证的读取:

      config.s3_access_policy = :authenticated_read
    

    然后model.file.url会自动生成RESTful URL。

    【讨论】:

    • 感谢您发布您的解决方案。您可能想将其标记为已回答:)
    【解决方案2】:

    通常您会在页面中嵌入 S3 URL,以便客户端的浏览器直接从 Amazon 获取文件。但是请注意,这会暴露原始未受保护的 URL。您可以使用长散列而不是可预测的名称来命名文件,因此它至少不可猜测 - 但一旦该 URL 公开,它基本上对 Internet 是开放的。因此,如果您绝对总是需要对文件进行访问控制,那么您需要像现在一样代理它。在这种情况下,您可能会决定将文件存储在本地更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2016-05-12
      • 2011-02-25
      • 2013-04-23
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多