2015-06-19 64 views
0

我正在使用Amazon S3服務和node.js,並且想要使用Amazon S3 listObjects()過濾目錄中的所有.mp3文件。有一個prefix參數,但沒有sufix。有沒有辦法使用正則表達式或像* .mp3之類的過濾器來做到這一點?如何使用Amazon S3過濾.mp3文件listObjects

這是函數參照http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#listObjects-property

var prefix = "myS3dir/"; 
bucket.listObjects({Prefix:prefix}, function(err, data){ 
    //do something with data 
}); 
+0

你可能想遍歷鍵和是的,使用正則表達式。 –

+0

是的,這是一個解決方案,但我不想遍歷鍵,我希望listObjects返回過濾的鍵列表。那可能嗎? – Ragnar

回答

2

都能跟得上。這對S3來說是不可能的。您只能通過前綴服務器端進行過濾。這與S3沒有真正的密鑰層次結構有關,它主要是一個key-> object store,並且前綴匹配在那裏工作。
如果你想做後綴匹配,你基本上必須提取所有密鑰的名稱並檢查它們的客戶端。

1

如果您需要通過.mp3文件擴展名進行查詢,並且S3對象的數量很少,那麼只需枚舉所有S3對象並提供您自己的內存過濾器/查詢。如果S3對象的數量很大(比如10k +這會枚舉慢),那麼你需要一個不同的解決方案。假設你不直接暴露S3結構到最終用戶,那麼這裏有一些想法:

  1. 插入前面的文件名的前綴,例如 mybucket/MP3/beatit.mp3 - 那麼你就可以使用前綴:mybucket/mp3 /。注意:例如,如果您還想查詢「beat *」,這也不算好。
  2. 反轉文件名,例如3 pm.titaeb,然後搜索前綴mybucket/3pm。我知道這聽起來很奇怪,它會阻止查詢「節拍*」,但在某些情況下,這是一個很好的解決方案。
  3. 使用輔助數據庫(例如MySQL),該輔助數據庫在文件擴展名上索引,以及您需要的任何內容,並且包含對S3位置的引用。
相關問題