मैं this "how-to" (एस 3 बाल्टी में फॉर्म पोस्ट) का पालन करने का प्रयास कर रहा हूं और मेरी नीति और हस्ताक्षर पर असफल होने लग रहा हूं।एस 3 अपलोड करने के लिए एक रेल पोस्ट फॉर्म के लिए नीति और हस्ताक्षर मुद्दे
मुझे यकीन नहीं है कि मेरी नीति और हस्ताक्षर गलत हैं? लेकिन मुझे पता है कि मुझे अपने सहायक में बनाए गए तरीकों का मूल्यांकन करने में कोई समस्या है। मैंने नीति & प्रतीकों को <%= :S3_UPLOAD_SIGNATURE %>
पर हस्ताक्षर मानों को परिवर्तित करने का प्रयास किया है और मैंने <% = h, <% = कच्चे, "# {<% = ..}" की कोशिश की है।
मैंने बिना किसी समस्या के पहले सहायक तरीके कहा है, इसलिए मैं थोड़ा खो गया हूं।
त्रुटि:
<form action="https://s3.amazonaws.com/MY_BUCKET" method="post" enctype="multipart/form-data">
<input type="hidden" name="key" value="uploads/${filename}">
<input type="hidden" name="AWSAccessKeyId" value= <%= ENV['AWS_ACCESS_KEY_ID'] %> >
<input type="hidden" name="acl" value="private">
<input type="hidden" name="success_action_redirect" value="http://localhost/">
<input type="hidden" name="policy" value= <%= S3_UPLOAD_POLICY %> >
<input type="hidden" name="signature" value= <%= S3_UPLOAD_SIGNATURE %> >
<input type="hidden" name="Content-Type" value="image/png">
<!-- Include any additional input fields here -->
File to upload to S3:
<input name="file" type="file">
<br>
<input type="submit" value="Upload File to S3">
</form>
और proj_files_helper.rb:
module ProjFilesHelper
def S3_UPLOAD_POLICY options = {}
options[:content_type] ||= ''
options[:acl] ||= 'private'
options[:max_file_size] ||= 500.megabyte
options[:path] ||= ''
Base64.encode64(
"{'expiration': '#{10.hours.from_now.utc.strftime('%Y-%m-%dT%H:%M:%S.000Z')}',
'conditions': [
{'bucket': '#{ENV['S3_BUCKET']}'},
['starts-with', '$key', ''],
{'acl': '#{options[:acl]}'},
{'success_action_status': '201'},
['content-length-range', 0, #{options[:max_file_size]}],
['starts-with','$Content-Type','']
]
}").gsub(/\n|\r/, '')
end
def S3_UPLOAD_SIGNATURE options = {}
Base64.encode64(
OpenSSL::HMAC.digest(
OpenSSL::Digest::Digest.new('sha1'),
ENV['AWS_SECRET_ACCESS_KEY'], s3_policy(options))).gsub("\n","")
end
end
के लिए धन्यवाद
NameError in Proj_files#new
Showing /app/views/proj_files/new.html.erb where line #8 raised:
uninitialized constant ActionView::CompiledTemplates::S3_UPLOAD_POLICY
Extracted source (around line #8):
5: <input type="hidden" name="AWSAccessKeyId" value= <%= ENV['AWS_ACCESS_KEY_ID'] %> >
6: <input type="hidden" name="acl" value="private">
7: <input type="hidden" name="success_action_redirect" value="http://localhost/">
8: <input type="hidden" name="policy" value= <%= S3_UPLOAD_POLICY %> >
9: <input type="hidden" name="signature" value= <%= S3_UPLOAD_SIGNATURE %> >
10: <input type="hidden" name="Content-Type" value="image/png">
11: <!-- Include any additional input fields here -->
मैं एक इसी new.html.erb के साथ एक proj_files नियंत्रक है ग़ौर करना!
अद्यतन: मैंने विधि नाम को कम मामले में बदल दिया और मुझे थोड़ा और आगे मिला (मुझे यह एहसास होना चाहिए था!)।
अब मैं एक S3 त्रुटि मिलती है:
<Error>
<Code>AccessDenied</Code>
<Message>
Invalid according to Policy: Policy Condition failed: ["eq", "$bucket", "MY_BUCKETS_NAME"]
</Message>
लगता है जैसे वहाँ एक ENV चर $ बाल्टी बुरा संदर्भ मैं के लिए ... "MY_BUCKETS_NAME" गौर करेंगे उचित बाल्टी नाम प्रदर्शित किया हो सकता है ... यदि कोई भी एस 3 के लिए रेल पोस्ट फॉर्म प्राप्त करने और मेरी त्रुटियों को चलाने/इंगित करने पर कोई मदद दे सकता है तो मैं इसकी सराहना करता हूं।
धन्यवाद
UPDATE2 टिप्पणी प्रति नीचे मैं अपने प्रपत्र कार्रवाई संशोधित करने के लिए "https://s3.amazonaws.com/MY_BUCKET" और इस त्रुटि प्राप्त: हो रही करीब ... धन्यवाद
Invalid according to Policy: Policy Condition failed: ["eq", "$acl", "public-read"]
!
UPDATE3 मैं लड़ाई लड़ रहा हूं!
मैंने नीति संशोधित की है और एसीएल को एक ही संगत मूल्य (निजी या सार्वजनिक-पढ़ने) रखने के लिए बनाया है।
टिप्पणियाँ नीचे मेरे लिए प्रपत्र कार्रवाई को संशोधित करने के लिए प्रेरित किया:
<Code>AccessDenied</Code>
<Message>
Invalid according to Policy: Policy Condition failed: ["eq", "$success_action_status", "201"]
</Message>
अजीब तरह से पर्याप्त है जब मैं एडब्ल्यूएस S3 प्रबंधन कंसोल पर जाएं और मेरी बाल्टी में एक फ़ाइल अपलोड, यह मेरे लिंक बताता है: http://MY_BUCKET.s3.amazonaws.com/
मैं इस त्रुटि मिलती है `http://s3.amazonaws.com/MY_BUCKET 'फॉर्म का है। मैंने amazonaws से पहले और बाद में MY_BUCKET जोड़ा है और अभी भी एक ही त्रुटि प्राप्त हुई है ...
मुझे यकीन नहीं है कि गलत कॉन्फ़िगरेशन कहां हो रहा है ... मैं एक नई बाल्टी बनाने जा रहा हूं और देख रहा हूं कि मैं सेटअप करता हूं या नहीं गलत....
धन्यवाद!
आईटी अब काम करता है !!! मैंने जवाब से सबकुछ तय किया ... लेकिन फिर एक और परिवर्तन करना पड़ा ...
मेरे फॉर्म में "success_ सफलता_action_redirect" फ़ील्ड था लेकिन मेरी नीति में सफलता_action_status था!
नीति और फॉर्म फ़ील्ड का मिलान होना चाहिए! ओह!
सभी मदद के लिए धन्यवाद ... थोड़ा और आगे ट्विक करने का समय!
मुझे लगता है कि आपका बाल्टी नाम नहीं है: MY_BUCKETS_NAME – apneadiving
मैंने त्रुटि संदेश बाल्टी नाम संदर्भ को इसके साथ बदल दिया ... लेकिन त्रुटि ने मेरी उचित बाल्टी को संदर्भित किया। – twinturbotom
क्या आपके पास यूआरएल में वही बाल्टी नाम है? 'https: // YOUR_BUCKET_NAME.s3.amazonaws.com /' – apneadiving