2015-10-06 37 views
4

我有一個s3存儲桶,其中包含包含不同網站的單個文件夾。我想生成一個預先登記的url來訪問特定的文件夾,但我想讓url允許訪問該文件夾中的所有對象。這可能嗎?s3 presigned url用於訪問整個文件夾

我使用的是紅寶石aws-sdk gem v2。

我現有的代碼看起來像通過這個

def get_object_url(bucket_name, object_name) 
    res = Aws::S3::Resource::new 
    obj = res.bucket(bucket_name).object(object_name) 
    exp = 1.day 
    url = obj.presigned_url(:get, { 
          expires_in: exp, 
          virtual_host: true 
         }) 
    url 
    end 

如OBJECT_NAME不工作的文件夾名稱。

+1

一個相對簡單的解決方法是爲您的應用程序接受一個用戶的請求 - 例如 - 路徑模式,如'/下載/安全/ $ {鬥}/$ {s3_object_path }'。如果用戶被授權下載,則生成一個過期很短的簽名URL,並在'Location:'標頭中返回帶有簽名URL的'302' http重定向。我使用這種方法在S3中升級了可下載文件的傳統平臺。 –

回答

8

不,S3並沒有真正的文件夾概念。這些文件夾是使用對象路徑的段「創建」的。它們不獨立於對象而存在。

+3

此外,V2和V4算法中的簽名都依賴於特定的對象鍵(「路徑」),對於任何給定的請求參數集,只能有一個有效簽名,從而可能形成通配符這意味着不止一個可能有效的簽名,對象和「文件夾」)是不可能的。 –

+1

有關這方面的消息嗎?這個限制是否仍然存在?有什麼可以解決的呢? – Vincenzo

+1

@ user3211074是的這個限制依然存在。由於S3的設計,它不太可能發生變化。 – datasage

相關問題