1

アップロードされたメディア ファイル (ビデオとオーディオ) をローカルではなく 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 サーバー スタックをバイパスして負荷を軽減することだと思いました。

私はこれを間違って考えていますか?

PS。ファイルのアップロードには CarrierWave を使用しています。それが関連しているかどうかはわかりません。

4

2 に答える 2

3

Amazon S3は、RESTful認証済み読み取りと呼ばれるものを提供します。これは、基本的に、保護されたコンテンツへのタイムアウト可能なURLです。

CarrierWaveはこれをサポートします。認証された読み取りに対してS3アクセスポリシーを宣言するだけです。

  config.s3_access_policy = :authenticated_read

その後model.file.url、RESTfulURLを自動的に生成します。

于 2011-05-08T00:23:59.343 に答える
-1

通常、S3 URLをページに埋め込んで、クライアントのブラウザがAmazonから直接ファイルをフェッチするようにします。ただし、これにより、保護されていない生のURLが公開されることに注意してください。予測可能なものではなく長いハッシュを使用してファイルに名前を付けることができるため、少なくとも推測はできません。ただし、そのURLが公開されると、基本的にインターネットに公開されます。したがって、ファイルへのアクセス制御が絶対に必要な場合は、現在行っているようにプロキシする必要があります。その場合は、ファイルをローカルに保存する方がよいと判断する場合があります。

于 2011-04-29T13:25:18.863 に答える