2015-02-17 13 views
17

का उपयोग कर S3 पर एक छवि अपलोड करना मुझे aws-sdk दस्तावेज़ों के साथ काम करने का समय लगता है, मेरे द्वारा अनुसरण किए जाने वाले सभी लिंक पुराने और अनुपयोगी लगते हैं।aws-sdk v2

मैं रुबी में एक एस 3 बाल्टी में एक छवि फ़ाइल अपलोड करने का एक सीधा आगे कार्यान्वयन उदाहरण ढूंढ रहा हूं।

  • मान लीजिए कि छवि पथ screenshots/image.png
  • में है और मैं अपने ENV

किसी भी सलाह बहुत सराहना कर रहा है में बाल्टी my_bucket

  • एडब्ल्यूएस creds रहने के लिए इसे अपलोड करना चाहते हैं।

  • +0

    जब मैं पालन उन उदाहरणों में मुझे त्रुटियां मिलती हैं जैसे: '' 'अनिर्धारित विधि 'लिखना' # (NoMethodError)' ' – YoDK

    +0

    मैं समाप्त हो गया यह उत्तर (http://stackoverflow.com/questions/130948/ruby-convert-file-to-string) फिर '' 'object = bucket.object ('image.png')' '' '' '' '' '' '' '' '' '' '' '' '' ' object.put (body: content) '' – YoDK

    +0

    @EldadMor आप v1 दस्तावेज से जुड़े हुए हैं। V2 दस्तावेज यहां पाया गया है: http://docs.aws.amazon.com/sdkforruby/api/index.html –

    उत्तर

    33

    का तरीका यहां बताया नामित बाल्टी और कुंजी करने के लिए डिस्क से फ़ाइल अपलोड कर सकते हैं:

    s3 = Aws::S3::Resource.new 
    s3.bucket('my_bucket').object('key').upload_file('screenshots/image.png') 
    

    सबसे सरल तकनीक है कि। आपको उस कुंजी के साथ 'कुंजी' को प्रतिस्थापित करना चाहिए जिसे आप अमेज़ॅन एस 3 में संग्रहीत करना चाहते हैं। मल्टीपार्ट अपलोड एपीआई का उपयोग करके यह आपके लिए बड़ी फाइलें स्वचालित रूप से अपलोड करेगा और असफल हिस्सों को फिर से प्रयास करेगा।

    डाल वस्तु का उपयोग कर हमेशा अपलोड करना पसंद करते हैं, तो आप #put कॉल या उपयोग कर सकते हैं एक Aws::S3::Client:

    # using put 
    s3 = Aws::S3::Resource.new 
    File.open('screenshots/image.png', 'rb') do |file| 
        s3.bucket('my_bucket').object('key').put(body:file) 
    end 
    
    # using a client 
    s3 = Aws::S3::Client.new 
    File.open('screenshots/image.png', 'rb') do |file| 
        s3.put_object(bucket:'my_bucket', key:'key', body:file) 
    end 
    

    इसके अलावा, वी 2 एसडीके के लिए API संदर्भ प्रलेखन यहाँ है: http://docs.aws.amazon.com/sdkforruby/api/index.html

    +0

    आप मेरे अजीब नायक हैं! पिछले 3-4 घंटों में इस काम को कोई फायदा नहीं हुआ है। Aws-sdk के v1 में ऐसा करना इतना आसान था लेकिन v2 अनावश्यक रूप से जटिल लगता है। – mmichael

    +0

    @mmichael मैं उत्सुक हूं कि v2 अपलोड v1 से अधिक जटिल हैं? वाक्यविन्यास बहुत समान है, नहीं? –

    +0

    ठीक है, v1 के साथ आपको क्लाइंट या संसाधन कक्षाओं से निपटने की ज़रूरत नहीं है, आप बस 's3 = AWS :: S3.new' और फिर 's3.buckets [' bucket_name '] चला सकते हैं। ऑब्जेक्ट [' key ' ] .write (फ़ाइल: '/ path/to/file') '। मैं वास्तव में misspoke, v2 संस्करण अधिक जटिल नहीं है। मेरा कहना था कि v2 दस्तावेज़ सिर्फ अधिक भ्रमित हैं। नए दस्तावेज़ों में कहीं भी यह आपको दिखाता है कि आपके उत्तर में चरणों को कैसे करें। और यदि वे करते हैं, तो यह [v1] में निर्देशों के रूप में स्पष्ट नहीं है (http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3.html) जहां यह आपको एक पृष्ठ पर जो कुछ भी चाहिए उसे दिखाता है । – mmichael