1

我在考慮是否在S3上託管上傳的媒體文件(視頻和音頻),而不是在本地。我需要在每次下載時檢查用戶的權限。在這種情況下,Amazon 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進行文件上傳。不確定這是否相關。

回答

3

亞馬遜S3提供了一些所謂的RESTful驗證的讀取,它們基本上以其他​​方式保護的內容timeoutable網址。

CarrierWave爲此提供了支持。簡單地聲明S3訪問策略驗證的讀:

config.s3_access_policy = :authenticated_read 

然後model.file.url將自動生成REST風格的URL。

+0

感謝您發佈您的解決方案。你可能想標記它爲回答:) – iwasrobbed 2011-05-27 17:03:14

-1

通常你會嵌入S3 URL在你的頁面,讓用戶的瀏覽器直接從亞馬遜獲取的文件。但請注意,這暴露了原始的未受保護的URL。你可以用長散列命名文件而不是可預測的東西,所以它至少不可猜測 - 但是一旦該URL被公開,它就基本上對互聯網開放。因此,如果您始終需要對文件進行訪問控制,那麼您需要像現在這樣進行代理。在這種情況下,你可能會決定在本地存儲文件。