Tôi đang cố gắng theo dõi this "how-to" (biểu mẫu POST tới thùng S3) và có vẻ không tuân theo chính sách và chữ ký của tôi.Các vấn đề về chính sách và chữ ký cho biểu mẫu đăng bài đường ray để tải lên s3
Tôi không chắc chắn chính sách và chữ ký của mình có sai không? Nhưng tôi biết tôi đang gặp sự cố khi đánh giá các phương pháp tôi đã tạo trong trình trợ giúp của mình. Tôi đã thử chuyển đổi các giá trị chữ ký chính sách & thành ký hiệu <%= :S3_UPLOAD_SIGNATURE %>
và tôi đã thử <% = h, <% = raw, "# {<% = ..}".
Tôi đã gọi các phương thức trợ giúp trước đây mà không có vấn đề gì nên tôi bị mất một chút.
lỗi:
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 -->
Tôi có một bộ điều khiển proj_files với một new.html.erb tương ứng:
<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>
và 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
Cám ơn hãy xem!
CẬP NHẬT: Tôi đã đổi tên phương thức thành chữ thường và giúp tôi có thêm một chút nữa (tôi nên nhận ra điều đó!).
Bây giờ tôi nhận được một lỗi S3:
<Error>
<Code>AccessDenied</Code>
<Message>
Invalid according to Policy: Policy Condition failed: ["eq", "$bucket", "MY_BUCKETS_NAME"]
</Message>
Có vẻ như có thể có một ENV biến $ xô tham khảo xấu tôi sẽ tìm kiếm ... "MY_BUCKETS_NAME" đã làm hiển thị tên xô thích hợp ... .Nếu bất cứ ai có thể cung cấp bất kỳ trợ giúp về việc gửi đường bưu điện hình thức để S3 lên và chạy/chỉ ra lỗi của tôi, tôi sẽ đánh giá cao nó.
Cảm ơn
UPDATE2 mỗi bình luận dưới đây tôi sửa đổi hình thức hành động của tôi để "https://s3.amazonaws.com/MY_BUCKET" và nhận được lỗi này:
Invalid according to Policy: Policy Condition failed: ["eq", "$acl", "public-read"]
Bắt gần ... Cảm ơn!
UPDATE3 Tôi đang chiến đấu!
Tôi đã sửa đổi chính sách và biểu mẫu ACL để có cùng giá trị nhất quán (riêng tư hoặc công khai đọc).
Comments dưới đây dẫn tôi đến thay đổi hình thức hành động để: http://MY_BUCKET.s3.amazonaws.com/
tôi nhận được lỗi này:
<Code>AccessDenied</Code>
<Message>
Invalid according to Policy: Policy Condition failed: ["eq", "$success_action_status", "201"]
</Message>
Lạ lùng thay khi tôi đi đến quản lý giao diện điều khiển AWS S3 và tải lên một tập tin vào xô của tôi, nó nói với tôi liên kết có dạng 'http://s3.amazonaws.com/MY_BUCKET'. Tôi đã thêm MY_BUCKET trước và sau amazonaws và vẫn nhận được lỗi tương tự ...
Tôi không chắc nơi có cấu hình sai đang xảy ra ... Tôi sẽ tạo một nhóm mới và xem liệu tôi có thiết lập không sai rồi....
Cảm ơn!
CNTT HOẠT ĐỘNG NGAY BÂY GIỜ !!! Tôi đã sửa mọi thứ từ câu trả lời ... nhưng sau đó phải thực hiện một thay đổi nữa ...
Biểu mẫu của tôi có trường "success_action_redirect" nhưng chính sách của tôi đã thành công!
Các trường chính sách và biểu mẫu phải khớp! DUH!
Cảm ơn tất cả sự giúp đỡ ... thời gian để tinh chỉnh thêm một chút!
Tôi đoán tên nhóm của bạn không phải là: MY_BUCKETS_NAME – apneadiving
Tôi đã thay thế tham chiếu tên nhóm thông báo lỗi bằng ... nhưng lỗi đã tham chiếu đến nhóm thích hợp của tôi. – twinturbotom
bạn có cùng tên nhóm trong url không? 'https: // YOUR_BUCKET_NAME.s3.amazonaws.com /' – apneadiving