2013-02-01 13 views
7

मैं एक S3 संरचना इस प्रकार है:लिस्टिंग सिर्फ एक S3 बाल्टी में सब फ़ोल्डर

s3bucketname -> List of first level keys -> List of second level keys -> List of third level keys -> Actual file. 

मैं क्या करने की जरूरत है कि s3bucket का नाम और प्रथम स्तर कुंजी के लिए एक प्रवेश, मैं दिया पहली स्तर कुंजी के नीचे रहने वाली सभी दूसरी स्तर की कुंजियों के नामों की आवश्यकता है। इसलिए अनिवार्य रूप से यदि हम इसे किसी फ़ोल्डर की तरह देखते हैं, तो मुझे root folder का नाम दिया गया है जो s3bucketname है और इसके उपफोल्डर्स subfolder1 में से एक का नाम है, मैं subfolder1 के भीतर रहने वाले सभी फ़ोल्डरों को सूचीबद्ध करना चाहता हूं। हालांकि नाम, पूरा रास्ता नहीं है।

क्या कोई यह बता सकता है कि जावा में अमेज़ॅन के जावा एसडीके का उपयोग करके इसे कैसे किया जाए?

धन्यवाद

+0

इस सूत्र यहाँ https://github.com/vinoct6/SimpleAWSClientForS3 – vinoth

उत्तर

30

मैं निम्नलिखित कोड है जो ठीक से काम करने लगता है, तो आप एक prefix गुजरती हैं और यकीन है कि उपसर्ग / के साथ समाप्त होता है, और भी सीमांकक आप उप की अपनी सूची प्राप्त करना चाहते हैं निर्दिष्ट करने के लिए था -directories। निम्नलिखित कार्य करना चाहिए:

public List<String> listKeysInDirectory(String bucketName, String prefix) { 
    String delimiter = "/"; 
    if (!prefix.endsWith(delimiter)) { 
     prefix += delimiter; 
    } 

    ListObjectsRequest listObjectsRequest = new ListObjectsRequest() 
      .withBucketName(bucketName).withPrefix(prefix) 
      .withDelimiter(delimiter); 
    ObjectListing objects = _client.listObjects(listObjectsRequest); 
    return objects.getCommonPrefixes(); 
} 
+0

कि चाल किया था से काम करने वाले कोड को लागू किया। धन्यवाद –

+0

ठीक है, मैं यह करने की कोशिश कर रहा हूं, लेकिन मुझे पहुंच की त्रुटि मिली है। @ चार्ल्स मेन्ग्यू क्या आपके पास एस 3 एक्सेस कॉन्फ़िगरेशन के बारे में कोई सुराग है? – Robert

+0

उपसर्ग - यह आवश्यक क्यों है। मैं अपनी बाल्टी में सभी वस्तुओं की सूची प्राप्त करना चाहता हूं, फिर उपनिर्देशिका की जांच करूँगा। तो इसके लिए मुझे उपसर्ग जोड़ने की भी आवश्यकता है? भविष्य में पाठकों के लिए – beginner

3

चार्ल्स संस्करण सुपर संक्षिप्त है! धन्यवाद @ चार्ल्स-मेन्गू

मैंने पेजिनेशन के माध्यम से बड़ी सूची का समर्थन करने के लिए एक एक्सटेंशन लिखा था।

public List<String> getSubPathsInS3Prefix(String bucketName, String prefix) { 
     if (!prefix.endsWith(FILE_DELIMITER)) { 
      prefix += FILE_DELIMITER; 
     } 
     List<String> paths = new ArrayList<String>(); 
     ListObjectsRequest listObjectsRequest = new ListObjectsRequest() 
       .withBucketName(bucketName).withPrefix(prefix) 
       .withMaxKeys(1000).withDelimiter(FILE_DELIMITER); 
     ObjectListing currentListing = s3Client.listObjects(listObjectsRequest); 
     paths.addAll(currentListing.getCommonPrefixes()); 

     while (currentListing == null || currentListing.isTruncated()) { 
      currentListing = s3Client.listNextBatchOfObjects(currentListing); 
      paths.addAll(currentListing.getCommonPrefixes()); 
     } 
     return paths; 
    } 

http://www.lazywiz.com/uncategorized/s3-missing-api-list-sub-paths-in-the-s3-bucket/

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