【问题标题】:Accessing AWS s3 files only from React Native App仅从 React Native App 访问 AWS s3 文件
【发布时间】:2018-11-25 14:27:44
【问题描述】:

我正在创建一个反应原生应用程序,它使用来自 AWS S3 存储桶的图像和音频文件。

我在后端使用 rails 和 carrierwave 来上传用户的图像和音频文件。

但是,我需要这些文件只能由移动应用的用户以某种方式访问​​。

我想我会使用签名的 url,但这个链接最多只能持续 7 天,这不适用于这个应用程序。这些文件应该在截止日期之前可用,截止日期可能在未来的任何时间。

AWS 中是否有某种方式可以让所有人(或仅应用程序)查看这些文件,但不能下载这些文件?我不想这样做的原因是用户应该能够决定音频文件是否可下载。

在发现签名的 url 的有效期不超过 7 天后,我不知道如何做到这一点(AWS 的新手)

【问题讨论】:

    标签: ruby-on-rails amazon-web-services amazon-s3 carrierwave


    【解决方案1】:

    代码相当粗糙,因为我大部分时间都在 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
    

    【讨论】:

    • 那么,当用户点击应用程序中的下载按钮时,它应该调用这个getFile-method吗?它会在下载对象之前检查文件是否可下载(在模型中)?但我的问题是:如果文件在 s3 中不公开(可下载),那么它不会在应用程序中播放?用户应该在应用程序中听到音频文件,并且如果用户声明文件不可下载,下载访问也将受到限制。但如果我把它公开,任何知道链接的人都可以下载它,对吧?
    猜你喜欢
    • 2019-10-29
    • 2021-08-24
    • 1970-01-01
    • 2020-06-15
    • 2020-11-12
    • 1970-01-01
    • 2019-03-19
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多