2012-07-15 12 views
17

मैं AWS Java SDK से परिचित हूं, मैंने संबंधित Javadoc को ब्राउज़ करने का भी प्रयास किया, लेकिन मुझे एहसास नहीं हुआ कि मैं उप निर्देशिका कैसे बना सकता हूं, यानी, एक निर्देशिका एक बाल्टी के भीतर वस्तु, और मैं इसे फाइल कैसे अपलोड करूं।अमेज़ॅन वेब सर्विसेज (एडब्ल्यूएस) एस 3 जावा एक उप निर्देशिका (ऑब्जेक्ट)

मान लें bucketName और dirName पहले से ही विद्यमान को (सार्वजनिक अनुमति के साथ) बाल्टी और एक नया (वस्तु) निर्देशिका जो बाल्टी (यानी bucketName/dirname /)

मैं निम्नलिखित की कोशिश की है के भीतर बनाए जाने की आवश्यकता अनुरूप:

AmazonS3Client s3 = new AmazonS3Client(
    new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY)); 
s3.createBucket(bucketName + "/" + dirName); //throws exception 

जो दूसरी पंक्ति पर अपवाद फेंकता है।

एक छोटा स्निपेट जो उप-निर्देशिका बनाता है और फ़ाइलों को अपलोड करता है, उसकी सराहना की जाएगी।

उत्तर

29

एस 3 में कोई "उप-निर्देशिका" नहीं है। बाल्टी हैं और बाल्टी के भीतर चाबियाँ हैं।

आप उपसर्ग खोजों का उपयोग करके पारंपरिक निर्देशिकाओं का अनुकरण कर सकते हैं। उदाहरण के लिए, यदि आप एक बाल्टी में निम्नलिखित कुंजी स्टोर कर सकते हैं:

foo/bar1 
foo/bar2 
foo/bar3 
blah/baz1 
blah/baz2 

और फिर foo/ के लिए एक उपसर्ग खोज करते हैं और तुम वापस मिल जाएगा:

foo/bar1 
foo/bar2 
foo/bar3 

अधिक जानकारी के लिए AmazonS3.listObjects देखें।


अद्यतन: मान लिया जाये कि आप पहले से ही एक मौजूदा बाल्टी है, कि बाल्टी के तहत कुंजी होते हैं /:

ObjectListing listing = s3.listObjects("someBucket", "foo/"); 
:

s3.putObject("someBucket", "foo/bar1", file1); 
s3.putObject("someBucket", "foo/bar2", file2); 
... 

तो फिर तुम सभी कुंजियों foo/ के साथ शुरू सूचीबद्ध कर सकते हैं

+0

आपके उत्तर के लिए धन्यवाद, एक लघु स्निपेट कोड प्रदान कर सकते हैं? चूंकि आप मेरी पोस्ट में देखते हैं, इसलिए मैंने 'foo/bar' जैसे कुछ बनाने की कोशिश की है, लेकिन यह अपवाद फेंकता है। – MrRoth

+0

@MrRoth: मेरा अपडेट देखें। – casablanca

18

एस 3 हमारे ऑपरेटिंग सिस्टम पर पारंपरिक तरीके से निर्देशिकाओं को नहीं देखता है। सबसे महत्वपूर्ण बात यह

s3.putObject("someBucket", "foo/bar1", file1); 

पढ़ें जानकारी के लिए पूरे ट्यूटोरियल here, और: जैसा कि कैसाब्लांका पहले से ही आप इस तरह निर्देशिकाओं करने के लिए फ़ाइलें अपलोड कर सकते कहा

public static void createFolder(String bucketName, String folderName, AmazonS3 client) { 
    // create meta-data for your folder and set content-length to 0 
    ObjectMetadata metadata = new ObjectMetadata(); 
    metadata.setContentLength(0); 

    // create empty content 
    InputStream emptyContent = new ByteArrayInputStream(new byte[0]); 

    // create a PutObjectRequest passing the folder name suffixed by/
    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, 
       folderName + SUFFIX, emptyContent, metadata); 

    // send request to S3 to create folder 
    client.putObject(putObjectRequest); 
} 

: यहाँ कैसे आप एक निर्देशिका बना सकते हैं क्या आपको निर्देशिका मिल जाएगी कि निर्देशिका को कैसे हटाया जाए।

+1

एक आकर्षण की तरह काम किया! – SexyBeast

0

यदि इसके बाद आप फ़ोल्डर बनाने के लिए चाहते हैं आप फ़ोल्डर 1 में बनाने के लिए डाल दिया आदेश का उपयोग करने के लिए निम्न कुंजियों का उपयोग की जरूरत है: बाल्टी के रूट में

-> फ़ोल्डर 1/folder1_ $ फ़ोल्डर पथ folder2 में $

/folder3/-> folder2/folder3/फ़ोल्डर 1/folder1_ $ फ़ोल्डर $

यह है हमेशा all_previous_folders/folderName/folderName_ $ फ़ोल्डर $

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