2015-02-05 55 views
3

我需要一些幫助來獲得新的紅寶石AWS S3 SDK 2.0工作。我正在使用區域eu-central-1,因此需要對所有請求使用最新簽名方法v4SignatureDoesNotMatch使用紅寶石aws-sdk寶石和預先登記的pos

其實我想創建一個預先登記的post url來與jquery-fileupload結合使用它。我已經安裝正確S3與所有訪問鍵,水桶,CORS配置等,但每次我生成用下面的代碼

@signer = Aws::S3::Presigner.new 
@url = @signer.presigned_url(:put_object, bucket: ENV['S3_BUCKET_NAME'], key: "documents/#{SecureRandom.uuid}/${filename}", acl: :public_read) 

這將創建下列URL

https://project-xxxxx-staging.s3.eu-central-1.amazonaws.com/documents/a253feb0-4c60-4735-8d95-4649c0d3dcb5/%24%7Bfilename%7D?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJVY57LY6XGIRIRHQ%2F20150205%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20150205T140425Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&x-amz-acl=public_read&X-Amz-Signature=ff2fbe233ed7380dc745aa7ba37421d7d8703db0d67208541e500367262a8c51 

我得到了一個網址以下錯誤

<Code>SignatureDoesNotMatch</Code> 
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message> 

有沒有人知道如何解決這個問題或對底層問題的任何提示?

我的環境我使用:

ruby '2.2.0' 
gem 'rails', '4.2.0' 
gem 'aws-sdk', '~> 2.0.21.pre' 

回答

1

預簽名URL包含頭文件和查詢參數會/應發送計算的簽名。可能發生的情況是,jquery上傳器正在添加Amazon S3需要進行簽名的標頭(如Content-Type)。您將需要建立presigned URL時,預先指定該內容類型:

signer = Aws::S3::Presigner.new signer.presigned_url(:put_object, bucket:'name', key:'key', acl:'public-read', content_type:'...')

而且,正確的罐裝ACL是「公開閱讀」,而不是:public_read。這也可能導致問題。