2016-01-21 141 views
0

我成功地使用傳統的PHP測試上傳到本地服務器。 但是,我有問題上傳到亞馬遜s3。文件簽名失敗使用Fineuploader使亞馬遜s3上傳

我寫了使用git的例子作爲reference.Please告訴我我做錯了什麼。 所有引用的腳本都在我本地系統的適當位置,我也沒有提出任何CORS請求。

下面是具體的代碼段:

// UI實例

var s3uploader = new qq.s3.FineUploader({ 

request: { 
endpoint: "bucket.s3.amazonaws.com", 
accessKey: "given key" 
}, 
signature: { 
endpoint: "endpoint.php" 
}, 
uploadSucess: { 
endpoint: "endpoint.php?success" 
}, 
}); 

在endpoint.php我已經分配clientPrivateKey,bucketName和主機名和我假設的東西,其餘的都是最好的左不變。 (包括composer.json文件)

錯誤:
。錯誤試圖解析簽名
2.Recieved空的或無效的服務器響應
3.Policy簽名失敗

另外: 是政策文件將由我們自己明確撰寫? 如何知道我的存儲桶是否僅支持版本4簽名?

回答

1

您必須包括值以下變量:

  • $ clientPrivateKey = $ _ENV [ 'AWS_CLIENT_SECRET_KEY'];
  • $ serverPublicKey = $ _ENV ['AWS_SERVER_PUBLIC_KEY'];
  • $ serverPrivateKey = $ _ENV ['AWS_SERVER_PRIVATE_KEY'];
  • $ expectedBucketName = $ _ENV ['S3_BUCKET_NAME'];

此外,如果你正在使用V4簽名,還必須包括一個值:

  • $ expectedHostName = $ _ENV [ 'S3_HOST_NAME'];

如果看到簽名錯誤,則可能是您沒有設置所有這些值,或者AWS密鑰不正確。

關於你提到的另外兩個問題:

現政策文件,明確由自己創作的?

不,Fine Uploader S3創建這些。請注意,政策文件只有用於非分塊上傳。對於分塊上傳,使用了S3分段上傳API,您的簽名服務器被要求籤名一串識別標題。

如何知道我的存儲桶是否僅支持版本4簽名?

http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

+0

我已經直接用於代碼的密鑰。設置用戶環境變量並使用$ _ENV或getenv()顯示爲空白。然而,因爲我沒有使用刪除功能,我收集的服務器公共和服務器私鑰不是必需的。當我從本地機器進行測試時,預期的主機名應該是什麼? –

+0

S3存儲桶的主機名 –

+0

做完所有事情之後,雙重檢查aws憑證密鑰我收到相同的錯誤。我可以向您發送快速審覈代碼嗎? –