amazon s3 - S3Wrapper.cfc के लेई संस्करण का उपयोग करना पिछले Init को प्राप्त नहीं कर सकता



amazon-s3 coldfusion (1)

मैं एस 3 के लिए नया हूँ और उसे छवि संग्रहण के लिए उपयोग करने की आवश्यकता है। मुझे सीएफ के लिए एक s2wrapper के आधा दर्जन संस्करण मिले लेकिन ऐसा लगता है कि वी 4 के लिए केवल एक सेट लेई द्वारा संशोधित किया गया है

https://gist.github.com/Leigh-/26993ed79c956c9309a9dfe40f1fce29

कॉम निर्देशिका में गिरा दिया और एक "परीक्षण" पृष्ठ बनाया जिसमें निम्न कोड है:

s3 = createObject('component','com.S3Wrapper').init(application.s3.AccessKeyId,application.s3.SecretAccessKey);

लेकिन निम्नलिखित त्रुटि मिली:

इसलिए मैंने लाइन 37 को बदल दिया

variables.Sv4Util = createObject('component', 'Sv4').init(arguments.S3AccessKey, arguments.S3SecretAccessKey);

सेवा मेरे

variables.Sv4Util = createObject('component', 'Sv4Util').init(arguments.S3AccessKey, arguments.S3SecretAccessKey);

अब मैं मिल रहा हूं:

मुझे लगता है Leigh कोड के माध्यम से जा रहा है और चीजों को बदलने शुरू एक बुरा विचार है क्योंकि मैं साल के लिए यहाँ lurked है पता है Leigh कोड ठोस है

क्या किसी को पता है कि इस पर किसी भी तरह का उपयोग करने के लिए कोई उदाहरण है या नहीं? अगर मैं गलत नहीं कर रहा हूं अगर यह एक फर्क पड़ता है तो मैं ल्यूसी 5 का इस्तेमाल कर रहा हूं और एडोब के सीएफ़ इंजन नहीं।

अद्यतन करें :

मैंने लेह के निर्देशों का पालन किया और त्रुटि अब चली गई है। मैं अपने परीक्षण पेज पर कुछ और कोड जोड़ रहा हूं जो अब इस तरह दिखता है:

<cfscript>
    s3 = createObject('component','com.S3v4').init(application.s3.AccessKeyId,application.s3.SecretAccessKey);

    bucket = "imgbkt.domain.com";
    obj = "fake.ping";
    region = "s3-us-west-1"

    test = s3.getObject(bucket,obj,region);
    writeDump(test);
    test2 = s3.getObjectLink(bucket,obj,region);
    writeDump(test2);

    writeDump(s3);
</cfscript>

मैं बाल्टी, ओबीजे या क्षेत्र के लिए जो कुछ भी डालता हूं उसके बावजूद:

जेआईसी मैं एडब्ल्यूएस गए और नई कुंजी प्राप्त की:

यदि आप अभी भी आस-पास हैं या किसी ने भी किसी भी सुझाव या मार्गदर्शन में एस 3 वालेपरों में से एक का इस्तेमाल किया है?

# 2 अपडेट करें: एलेक्स की मदद के बाद भी मैं इसे काम करने में सक्षम नहीं हूं GetObjectLink से प्राप्त लिंक मान्य नहीं है और getObject एक ऑब्जेक्ट को डाउनलोड नहीं करता है। मैंने सोचा था कि मैं putObject विधि का प्रयास करेंगे

test3 = s3.putObject(bucketName=bucket,regionName=region,keyName="favicon.ico");
writeDump(test3);

यह देखने के लिए कि क्या कोई अतिरिक्त जानकारी है, मुझे यह प्राप्त हुआ है:

मुझे यह लेख मिला है https://shlomoswidler.com/2009/08/amazon-s3-gotcha-using-virtual-host.html लेकिन यह बहुत पुराना है और चूंकि एस 3 विशेष रूप से बकेट नामों में डॉट्स का उपयोग करने का सुझाव देता है, मैं यह नहीं किसी भी अधिक प्रासंगिक है। जाहिर है, मैं कुछ गलत कर रहा हूं लेकिन मैंने इसे हल करने के लिए घंटों का समय बिताया है और मुझे यह पता नहीं लग सकता है कि यह क्या हो सकता है।


मैं आपको कोड का एक ठहरने देता हूं:

getObjectLink फ़ाइल के लिए एक HTTP यूआरएल देता है जो कि क्षेत्र s3-us-west-1 imgbkt.domain.com s3-us-west-1 की बाल्टी imgbkt.domain.com को देख रहा है। यह लिंक अस्थायी है और डिफ़ॉल्ट रूप से 60 सेकंड के बाद समाप्त हो जाता है।

getObject आह्वान करता है और तुरंत HTTP GET का उपयोग करते हुए URL का अनुरोध करता है। प्रतिक्रिया तब S3v4.cfc की डायरेक्टरी में सहेजी जाती है, जो फाइलनाम के साथ fake.ping है। अंत में फ़ंक्शन डाउनलोड की गई फ़ाइल का पूर्ण पथ देता है: E:\wwwDevRoot\taa\fake.ping

फ़ाइल को किसी भिन्न स्थान में सहेजने के लिए, आप इनसे अनुरोध करेंगे:

downloadPath = 'E:\';
test = s3.getObject(bucket,obj,region,downloadPath);
writeDump(test);

HTTP अनुरोध तुल्यकालिक है, जिसका अर्थ है कि फ़ाइल फ़ाइलपथ पूरी होने पर पूरी तरह से डाउनलोड हो जाएगी।

यदि आप फ़ाइल की वास्तविक सामग्री तक पहुंच बनाना चाहते हैं, तो आप यह कर सकते हैं:

test = s3.getObject(bucket,obj,region);

contentAsString = fileRead(test); // returns the file content as string
// or
contentAsBinary = fileReadBinary(test); // returns the content as binary (byte array)

writeDump(contentAsString);
writeDump(contentAsBinary);

(आप सामग्री को स्ट्रीम कर सकते हैं यदि फ़ाइल फ़ाइल के बाद से बड़ी है, तो फ़ाइल fileRead / फाइल fileReadBinary पूरी फाइल को बफर में पढ़ती है। फ़ाइल का उपयोग करें fileOpen को स्ट्रीम करने के लिए fileOpen

क्या यह आपकी सहायता करता है?