我正在创建一个反应本机应用程序,该应用程序使用来自AWS S3存储桶的图像和音频文件。
我在后端使用rails和carrierwave来上传用户的图像和音频文件。
但是,我需要文件只能以某种方式由移动应用程序的用户访问。
我认为我会使用签名的url,但是此链接最多只能使用7天,这不适用于此应用。文件应在截止日期之前可用,截止日期可以是将来的任何时间。
AWS中是否有某种方式可以使所有人(或仅应用程序)查看这些文件,但无法下载?我之所以不想这样做,是因为用户应该能够确定音频文件是否可下载。
发现签名的URL的有效期超过7天后,我不知道如何完成此操作(AWS相当新手)
答案 0 :(得分:0)
在我花费大部分时间在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