Próbuję podążać za this "how-to" (z formularza POST do wiadra S3) i wygląda na to, że zawieruszyłem moją polisę i podpis.Problemy z polityką i podpisem dla formularza postu na szynach do przesyłania s3
Nie jestem pewien, czy moja polityka i podpis są błędne? Ale wiem, że mam problem z oceną metod, które stworzyłem w moim pomocniku. Próbowałem przekonwertować wartości sygnatury Policy & na symbole <%= :S3_UPLOAD_SIGNATURE %>
i wypróbowałem <% = h, <% = raw, "# {<% = ..}".
Zadzwoniłem już do metod pomocniczych bez żadnych problemów, więc jestem trochę zagubiony.
błąd:
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 -->
Mam kontroler proj_files z analogicznym new.html.erb:
<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>
i 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
Dzięki za spojrzeć!
UPDATE: Zmieniłem nazwy metody na małe i że dostał mnie nieco dalej (mam sobie sprawę, że!).
Teraz pojawia się błąd S3:
<Error>
<Code>AccessDenied</Code>
<Message>
Invalid according to Policy: Policy Condition failed: ["eq", "$bucket", "MY_BUCKETS_NAME"]
</Message>
Wydaje się, że może być zmienna $ ENV wiadro złe odniesienie będę szukać ... „MY_BUCKETS_NAME” nie wyświetla odpowiednią nazwę łyżki ... .Jeśli ktoś może zaoferować jakąkolwiek pomoc w uzyskaniu formularza postu na szynach do S3 i uruchomieniu/wskazaniu moich błędów, byłbym wdzięczny.
Dzięki
Update2 na komentarz poniżej zmodyfikowałem moje działanie formularz do "https://s3.amazonaws.com/MY_BUCKET" i pojawił się ten błąd:
Invalid according to Policy: Policy Condition failed: ["eq", "$acl", "public-read"]
zbliżają ... Dzięki!
UPDATE3 Walczę w walce!
Zmodyfikowałem zasady i utworzyłem listy ACL tak, aby miały taką samą stałą wartość (prywatne lub publiczne czytanie). poniżej
Komentarze doprowadziło mnie do modyfikacji formy działań mających na celu: http://MY_BUCKET.s3.amazonaws.com/
otrzymuję ten błąd:
<Code>AccessDenied</Code>
<Message>
Invalid according to Policy: Policy Condition failed: ["eq", "$success_action_status", "201"]
</Message>
Co dziwne, kiedy idę do konsoli zarządzania AWS S3 i przesłać plik do mojego wiadra, to mówi mi link jest z formularza "http://s3.amazonaws.com/MY_BUCKET". Dodałem MY_BUCKET przed i po amazonaws i nadal otrzymałem ten sam błąd ...
Nie jestem pewien, gdzie występuje błędna konfiguracja ... Zamierzam stworzyć nowe wiadro i sprawdzić, czy skonfigurowałem źle....
Dzięki!
TO DZIAŁA TERAZ !!! Naprawiłem wszystko od odpowiedzi ... ale potem musiałem wprowadzić jeszcze jedną zmianę ...
Moja forma miała pole "success_action_redirect", ale moja polisa osiągnęła sukces_action_status!
Pola zasad i formularzy muszą być zgodne! DUH!
Dziękuję za całą pomoc ... czas, aby poprawić nieco dalej!
Przypuszczam, że nazwa Twojego zasobnika nie jest: MY_BUCKETS_NAME – apneadiving
Zastąpiłam nazwę referencyjną wiadra o wiadkach o błędzie z tym ... ale błąd odwoływał się do mojego właściwego zasobnika. – twinturbotom
Czy w adresie URL jest ta sama nazwa zasobnika? 'https: // YOUR_BUCKET_NAME.s3.amazonaws.com /' – apneadiving