2012-11-02 86 views
1

在AWS-SDK,它列出了表格的Ruby代碼:AWS-SDK S3大名單目錄失敗

s3 = AWS::S3.new 
bucket = s3.buckets[bucket_name] 
tree = bucket.as_tree(:prefix => 'myshop/products') 
directories = tree.children.select(&:branch?).collect(&:prefix) 

失敗的錯誤: 「無法找到S3列表標記物體響應」

目錄

/myshop/products/1474472/original.jpg 
/myshop/products/1474472/small.jpg 
/myshop/products/1474472/mini.jpg 
/myshop/products/1333333/original.jpg 
/myshop/products/1333333/small.jpg 
/myshop/products/1333333/mini.jpg 

結構...

更多的100 000 OBJ

我想驗證(例如, 「1474472」)的目錄中創建

我的計劃:AWS-S3-列表 - >紅寶石陣列 - >發現陣列(array.include?)

!!!需要非常快速的方法 - 即將結束的世界:)

+0

我不熟悉Ruby SDK,但S3只允許您一次列出1000個對象,因此列出100,000個對象將導致至少100個HTTP請求。如果你想檢查某個特定對象的存在,那麼發送該對象的HEAD請求是最好的方法。這聽起來像你想檢查一個或多個文件匹配給定的前綴,你能不能適應你現有的前綴搜索包括子目錄名稱? –

+0

嗨,aws ping需要288毫秒 - 0.3秒х10000 = 3000秒= 50分鐘,我很長。 – memoris

回答

0

有沒有這樣的東西在亞馬遜S3中的文件夾。這是一個「平面」文件系統。查看this answer

您真正需要的是驗證您的存儲桶中是否存在給定的前綴(例如「/ myshop/products/1474472」)。
他們的REST API絕對支持它,看看the documentation。您需要列出與給定prefix相匹配的密鑰(這將是「文件名」),可以作爲參數傳遞。您還可以通過將max-keys參數設置爲1來優化您的呼叫。這樣,如果您在響應中收到任何非零數量的項目,則存儲區中已經包含名稱以給定前綴開頭的文件。