我試圖使用PUT請求將文件上傳到Amazon S3。我使用boto生成我簽名的網址。如果我這樣做使用簽名URL上傳到Amazon S3適用於curl,但不適用於javascript
curl --upload-file test.jpg $SIGNED_URL
然後上傳工作正常(所以沒有簽署的URL的問題)。我也用捲曲的方式將引用者設置爲各種各樣的東西,並且它仍然有效,所以我不認爲還有CORS問題。我試圖用JavaScript上傳一個文件blob,如下所示:
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("PUT", $SIGNED_URL);
xmlhttp.setRequestHeader('Content-Type', blob.type);
xmlhttp.send(blob);
這總是返回403 Forbidden錯誤。我發現很難在網上找到任何有關從javascript向S3發佈PUTing數據的信息。我現在意識到POST表單數據更常見,但是有什麼方法可以修改我正在做的工作嗎?
編輯:我已經找到了錯誤的身體現在:
> <Error><Code>SignatureDoesNotMatch</Code> <Message>The request
> signature we calculated does not match the signature you provided.
> Check your key and signing method.</Message>
這樣看來,簽約是問題。同樣,當我用curl使用它時(甚至在javascript失敗後),同樣的確切網址也能正常工作。
感謝張貼這個。 – Feargal
這個答案拯救了我幾個小時的生命:) – Rubico