你有任何使用FineUploader.com進行ruby簽名的s3服務器簽名示例嗎?我試圖在這許多變化:FineUploader在Ruby中籤名
if(@valid_data.headers.present?)
signature = OpenSSL::HMAC.digest(
OpenSSL::Digest::Digest.new('sha1'),
S3_SECRET,
@valid_data.headers).gsub(/\n/, '')
else
signature = Base64.encode64(
OpenSSL::HMAC.digest(
OpenSSL::Digest::Digest.new('sha1'),
S3_SECRET,
Base64.encode64(@valid_data.headers)
)
).gsub(/\n/, '')
details.policy = Base64.encode64({ expiration: @valid_data.expiration,
conditions: @valid_data.conditions
}.to_json
).gsub(/\n|\r/, '')
end
details.signature = signature
render :json => details, :status => 200 and return
但不能讓我做匹配標誌亞馬遜給出的跡象,因此我得到每次上傳我
我查了GitHub庫,軌道錯誤s3幫助只指向https://github.com/Widen/fine-uploader-server/blob/master/rails.md,它指向https://github.com/Widen/fine-uploader-server/wiki/Rails---CarrierWave,它似乎沒有任何連接到FineUploader。 最佳, 溫尼
編輯(澄清)
爲5MB文件,簽署了頭PARAMS與代碼工作正常,從http://aws.amazon.com/articles/1434/#signyours3postform
signature = Base64.encode64(
OpenSSL::HMAC.digest(
OpenSSL::Digest::Digest.new('sha1'),
S3_SECRET, @valid_data.headers)
).gsub("\n","")
對於亞5MB的文件,它需要一個政策,一個簽名 FineUploader給我一個「條件」參數,我用它來獲得所有需要的信息:
conds = [
{"acl" => "private"},
{"bucket" => conditions[1][:bucket]},
{"Content-Type" => conditions[2]["Content-Type"]},
{"success_action_status" => "200"},
{"key" => conditions[4][:key]},
{"x-amz-meta-qqfilename" => conditions[5]["x-amz-meta-qqfilename"]},
{"content-length-range" => [content_length_range[1], content_length_range[2]]}
]
policy = Base64.encode64({ "expiration" => @valid_data.expiration.to_s,
"conditions" => conds
}.to_json).
gsub("\n","")
signature = Base64.encode64(
OpenSSL::HMAC.digest(
OpenSSL::Digest::Digest.new('sha1'),
S3_SECRET, policy)
).gsub("\n","")
在AWS 100%升級到aws後,AWS始終以「無效策略:無效簡單條件:值mu ..」作爲響應。我也不能似乎找到內https://github.com/aws/aws-sdk-ruby
而且政策簽字功能,根據紅寶石AWS-SDK(https://github.com/aws/aws-sdk-ruby/blob/master/lib%2Faws%2Fcore%2Fsigners%2Fbase.rb),紅寶石使用SHA256,而不是SHA1
當我停下來傳遞內容長度範圍爲conds,簽名按預期工作。關閉 –