this "how-to" (POST - S3 bucket formunu) takip etmeye çalışıyorum ve politikamda ve imzamda başarısız oluyor gibi görünüyor.Bir ray için ilke ve imza sorunları s3'e yükleme formu gönderiliyor
Politikam ve imzam yanlış olduğundan emin değilim? Ama biliyorum, yardımcımda yarattığım yöntemleri değerlendirirken bir sorun yaşıyorum. İlke & imza değerlerini <%= :S3_UPLOAD_SIGNATURE %>
simgelerine dönüştürmeyi denedim ve <% = h, <% raw = "{<% = ..}" denedim.
Hiç yardım almadan önce yardımcı yöntemler denedim, bu yüzden biraz kayboldum.
hatası:
<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>
ve 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
Teşekkür
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 -->
bir proj_files karşılık gelen bir new.html.erb ile denetleyiciniz göz atmak!
GÜNCELLEME: Ben küçük harfe yöntem adları değişti ve o (ben fark olmalı!) Biraz daha ileri beni.
Şimdi bir S3 hata alıyorum: i doğru kovalar adını görüntülemek yaptığı için ... "MY_BUCKETS_NAME" bakacağız bir ENV değişken $ kova kötü referans olabilir gibi
<Error>
<Code>AccessDenied</Code>
<Message>
Invalid according to Policy: Policy Condition failed: ["eq", "$bucket", "MY_BUCKETS_NAME"]
</Message>
görünüyor ... .Kimseyi almak için herhangi bir yardım sunabilirse, S3'e form gönderme ve hata yapma/hata yapma konusunda teşekkür ederim.
Teşekkür
benim form eylemi modifiye etmek " https://s3.amazonaws.com/MY_BUCKET" ve bu hata aldı aşağıda Başına yorumUpdate2 : yakın ... Teşekkür Alma
Invalid according to Policy: Policy Condition failed: ["eq", "$acl", "public-read"]
!
UPDATE3 Dövüşle savaşıyorum!
Politikayı değiştirdim ve ACL'yi aynı tutarlı değere (özel veya genel okuma) sahip olacak şekilde oluşturdum.
Ben AWS S3 yönetim konsoluna gidip kovaya bir dosyayı karşıya olduğunda Garibi<Code>AccessDenied</Code>
<Message>
Invalid according to Policy: Policy Condition failed: ["eq", "$success_action_status", "201"]
</Message>
, bana bağlantıyı anlatır: bu hatayı alıyorum http://MY_BUCKET.s3.amazonaws.com/
:
Yorumlar aşağıda form eylemi değiştirerek götürdü http://s3.amazonaws.com/MY_BUCKET formudur. MY_BUCKET önce ve sonra amazonaws ekledim ve hala aynı hata aldı ...
Yanlış yapılandırma nerede meydana geldiğinden emin değilim ... Yeni bir kepçe oluşturacağım ve ayarlayıp ayarlamadığımı göreceğim yanlış....
Teşekkürler!
ŞİMDİ ÇALIŞIYOR! Her şeyi yanıtladım ... ama bir değişiklik daha yapmam gerekiyordu ...
Formumun bir "success_action_redirect" alanı vardı ancak politikam bir success_action_status'a sahipti!
İlke ve form alanları eşleşmelidir! YAA!
Yardımlarınız için teşekkürler ... biraz daha zaman ayırma zamanı!
Kepçe adınız sanırım: MY_BUCKETS_NAME – apneadiving
Hata msgs bucket name referansını bununla değiştirdim ... ancak hata, uygun paketime başvurdu. – twinturbotom
URL'de aynı kova adı var mı? https: // YOUR_BUCKET_NAME.s3.amazonaws.com/' – apneadiving