2015-08-21 6 views
6

मेरी S3 बाल्टी कि इतने की तरह एक संरचना में चित्र शामिल हैं को देखते हुए:केवल रूट वस्तुओं (फ़ोल्डर्स) एस 3 में की सूची प्राप्त - एडब्ल्यूएस एसडीके v3 php

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

जहां जड़ मेरी बाल्टी है, और कोई अन्य कर रहे हैं मेरी जड़ में फाइलें, बस उन फ़ोल्डर्स (ऑब्जेक्ट्स), मैं केवल उन ऑब्जेक्ट्स की सूची कैसे प्राप्त करूं?

portraits/ 
landscapes/ 

मैं ListObjects कॉल में डेलीमीटर और उपसर्ग का उपयोग करने से परिचित हूं।

अगर मैं निम्नलिखित करते हैं, मेरे पास कोई परिणाम प्राप्त:

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

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

अगर मैं एक सीमान्तक का उपयोग नहीं करते, मैं सब कुछ मिलता है, जाहिर है।

मैं उपसर्ग का उपयोग नहीं कर सकता क्योंकि मेरी इच्छित वस्तुएं रूट-स्तर हैं। अन्यथा, मुझे उपसर्ग का उपयोग करने में कोई समस्या नहीं है, केवल 'पोर्ट्रेट /'

मेरी खोजों से, मैंने केवल पिछले वर्षों से समाधान ढूंढने में कामयाब रहा है जो केवल aws php sdk v1 पर लागू होते हैं या 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

निर्देशिकाएँ वास्तव में नहीं है अमेज़न S3 में मौजूद हैं। हालांकि, प्रबंधन कंसोल फ़ोल्डरों के निर्माण की अनुमति देता है, और पथ निर्देशिकाओं के भ्रम को देने के लिए समर्थित हैं।

उदाहरण के लिए, foo निर्देशिका में संग्रहीत ऑब्जेक्ट /foo/bar.jpg का पथ है। चाल यह है कि ऑब्जेक्ट को वास्तव में bar.jpg की बजाय foo/bar.jpg कहा जाता है। अधिकांश उपयोगकर्ता अंतर को भी ध्यान में नहीं रखेंगे।

एपीआई से, निर्देशिकाओं को सूचीबद्ध करने की क्षमता CommonPrefixes की अवधारणा के माध्यम से प्रदान की जाती है, जो निर्देशिका पथ के समान दिखती है और अंतिम स्लैश से पहले ऑब्जेक्ट नामों ('कुंजी') के हिस्से को शामिल करती है।

देखें: Listing Keys Hierarchically Using a Prefix and Delimiter

संबंधित मुद्दे