2015-08-21 52 views
6

由於包含在像這樣的結構圖像我S3鬥:只檢索根對象(文件夾)在S3中的列表 - AWS SDK V3 PHP

root/portraits/portrait_001.jpg 
root/landscapes/landscape_001.jpg 

其中root是我的水桶,並沒有其他文件在我的根,只是這些文件夾(對象),我如何檢索只有這些對象的列表?

portraits/ 
landscapes/ 

我熟悉在ListObjects調用中使用分隔符和前綴。

如果我這樣做,我沒有得到任何結果:

$objects = $s3->getIterator('ListObjects', array(
    'Bucket' => $bucket, 
    'Delimiter' => '/', 
)); 

foreach($objects as $object) 
    echo $object['Key'] . "\n"; 

如果我不使用分隔符,我得到的一切,很明顯。

我不能使用前綴,因爲我希望的對象是根級。否則,我沒有問題使用前綴說,只列出'肖像/'中的文件

從我的搜索, V2和我沒有嘗試過那些運氣(V3是完全不同的)

有什麼建議嗎?我覺得我錯過了一些簡單的東西,但是通過文檔搜索,我找不到任何東西來幫助我。作爲最後的手段,我就必須堅持用手工聲明數組

$categories = ['portraits/', 'landscapes/'] 

但是,這不是在我希望在未來增加更多類別的情況理想,而不必擔心手動添加另一個類別。

任何幫助,將不勝感激:)

編輯 - 解決方案

我一定是找錯了地方在我的對象轉儲,但最終還是看到了常用前綴在返回的結果從帶有分隔符「/」的ListObjects調用,如下所示:

$s3->listObjects(array('Bucket' => $bucket, 'Delimiter' => '/')); 
+0

您是否嘗試過使用的'CommonPrefixes'從'ListBucket'返回的列表? https://docs.aws.amazon.com/AmazonS3/latest/dev/ListingKeysHierarchy.html –

+0

最初我找不到任何地方的通用前綴,但也許我忽略了在我的對象轉儲錯誤的地方。我現在才找到他們。謝謝您的幫助 :) –

回答

4

目錄實際上並不存在於Amazon S3中。但是,管理控制檯允許創建文件夾,並且支持路徑以賦予目錄錯覺。

例如,存儲在foo目錄中的對象bar.jpg的路徑爲/foo/bar.jpg。訣竅是該對象實際上被稱爲foo/bar.jpg而不僅僅是bar.jpg。大多數用戶甚至不會注意到其中的差異。

從API中,通過CommonPrefixes的概念提供列出目錄的能力,它與目錄路徑看起來相同,由最後一個斜槓前的對象名稱部分('鍵')組成。

請參見:Listing Keys Hierarchically Using a Prefix and Delimiter

相關問題