Доступ к файлам AWS s3 только из React Native App - PullRequest
0 голосов
/ 25 ноября 2018

Я создаю собственное приложение, которое использует изображения и аудиофайлы из корзины AWS S3.

Я использую рельсы и несущую в бэкэнде для загрузки изображений и аудиофайлов от пользователей.

Но мне нужно, чтобы файлы были доступны только пользователям мобильного приложения каким-либо образом.

Я подумал, что буду использовать подписанный URL, но эта ссылка может длиться не более 7 дней, чтоне работает для этого приложения.Файлы должны быть доступны до крайнего срока, который может быть в любое время в будущем.

Есть ли в AWS какой-то способ сказать, что эти файлы могут просматривать все (или только приложение), но не могут быть загружены?Причина, по которой я этого не хочу, заключается в том, что пользователи должны иметь возможность решать, загружать аудиофайл или нет.

После того, как выяснилось, что подписанные URL не действительны дольше 7 дней, я не знаюкак это сделать (новичок в AWS)

1 Ответ

0 голосов
/ 25 ноября 2018

Код довольно грубый, так как я провожу большую часть своего времени в Node + Go, но я думаю, что он дает основную точку зрения.

Вы хотите создать конечную точку в своем API для управления воспроизведением файлов.Все взаимодействие с файлом будет осуществляться через эту конечную точку таким образом, чтобы вы могли контролировать доступ к файлу любым удобным для вас способом.

class SoundFileController < ActionController::Base
  def getFile


    file = SoundFile.get(params[:fileId])


    //do some validation to determine if you can play the file. 
    //you may want to validate an auth token, or some other 
    //user validation logic that's important to your system here

    if file.is_downloadable
        AWS::S3::Base.establish_connection!(  )
        url = AWS::S3::S3Object.url_for(file.path, YOUR_BUCKET, :expires_in => 1.minutes)

        redirect_to url
    end 

    //file is not downloadable 
    //return a forbidden message
    raise ActionController::Forbidden

  end 
end
...