Помогает ли Amazon S3 в этом случае? - PullRequest
1 голос
/ 29 апреля 2011

Я думаю о том, размещать ли загруженные медиафайлы (видео и аудио) на 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 для загрузки файлов. Не уверен, что это актуально.

Ответы [ 2 ]

3 голосов
/ 08 мая 2011

Amazon S3 предоставляет что-то, называемое RESTful-аутентифицированным чтением, которое в основном является URL-адресами с временной привязкой к защищенному содержимому.

CarrierWave предоставляет поддержку для этого. Просто объявите политику доступа S3 для аутентифицированного чтения:

  config.s3_access_policy = :authenticated_read

, а затем model.file.url автоматически сгенерирует RESTful URL.

0 голосов
/ 29 апреля 2011

Как правило, вы вставляете URL-адрес S3 на свою страницу, чтобы браузер клиента извлекал файл непосредственно из Amazon.Однако обратите внимание, что это предоставляет необработанный незащищенный URL.Вы можете назвать файл с длинным хешем вместо чего-то предсказуемого, так что, по крайней мере, это невозможно догадаться - но после того, как этот URL открыт, он, по сути, открыт для Интернета.Так что, если вам абсолютно всегда нужен контроль доступа к файлам, то вам нужно прокси-сервер, как вы это делаете в настоящее время.В этом случае вы можете решить, что лучше хранить файл локально.

...